471,313 Members | 2,029 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,313 software developers and data experts.

Asynchronous webrequest taking 100 % CPU usage

Hi all
i am having application which is using asychronous web request.

At a time i am processing 5 urls asynchronously.

Application working properly for 5 asynchronous call. But sometimes CPU
usage suddently increases to 100 %.

Can some one tell me why this is happening.

Any help will be truely appreciated.

thanks in advance.

Dec 7 '05 #1
5 5325
Hi Archana,

Web Requests are allways synchronous.

This may be a bit a shocking answer but remember that the http protocol
allways need a response 200 Ok or some kind or error.
So lets say you use Javascript to do a post towards a webservice using the
asynch switch. Although your code will continue to run untill the event
requestcomplete (or something like that) hits.

The line towards the webserver will remain open.

If you really want to be asynchronous using the web start the server side
processes in seperate treads. I think IE is looping through it's open
connections increasing the CPU load to 100% This is when I found out the
lines remained open :-)

Hope this helped.

Kind regards,

--
Rainier van Slingerlandt
(Freelance trainer/consultant/developer)
www.slingerlandt.com
"archana" wrote:
Hi all
i am having application which is using asychronous web request.

At a time i am processing 5 urls asynchronously.

Application working properly for 5 asynchronous call. But sometimes CPU
usage suddently increases to 100 %.

Can some one tell me why this is happening.

Any help will be truely appreciated.

thanks in advance.

Dec 7 '05 #2
Hi

thanks for your reply.

I am using webrequest class sychronously. And i have C# desktop based
application. Not using any server side scripting. In MSDN , one
example is giving for making asynchronous request. That i am using
which is taking lots of cpu usage if i increase asynchronous request
from 1 to 5 request.

I hope you will get my problem.

Thanks
Rainier [MCT] wrote:
Hi Archana,

Web Requests are allways synchronous.

This may be a bit a shocking answer but remember that the http protocol
allways need a response 200 Ok or some kind or error.
So lets say you use Javascript to do a post towards a webservice using the
asynch switch. Although your code will continue to run untill the event
requestcomplete (or something like that) hits.

The line towards the webserver will remain open.

If you really want to be asynchronous using the web start the server side
processes in seperate treads. I think IE is looping through it's open
connections increasing the CPU load to 100% This is when I found out the
lines remained open :-)

Hope this helped.

Kind regards,

--
Rainier van Slingerlandt
(Freelance trainer/consultant/developer)
www.slingerlandt.com
"archana" wrote:
Hi all
i am having application which is using asychronous web request.

At a time i am processing 5 urls asynchronously.

Application working properly for 5 asynchronous call. But sometimes CPU
usage suddently increases to 100 %.

Can some one tell me why this is happening.

Any help will be truely appreciated.

thanks in advance.


Dec 8 '05 #3
Rainier [MCT] wrote:
Hi Archana,

Web Requests are allways synchronous.

This may be a bit a shocking answer but remember that the http
protocol allways need a response 200 Ok or some kind or error.


You're confusing asynchronous I/O with connection-oriented protocols.
HTTP isn't synchronous. Nor is it asynchronous. The term just doesn't
apply here.

Cheers,
--
http://www.joergjooss.de
mailto:ne********@joergjooss.de
Dec 9 '05 #4
archana wrote:
Hi all
i am having application which is using asychronous web request.

At a time i am processing 5 urls asynchronously.

Application working properly for 5 asynchronous call. But sometimes
CPU usage suddently increases to 100 %.

Can some one tell me why this is happening.

Any help will be truely appreciated.


Post your code, otherwise it's all just guessing.

Cheers,
--
http://www.joergjooss.de
mailto:ne********@joergjooss.de
Dec 9 '05 #5
Hi

i am posting code of processing url asynchronously.

using System;
using System.Net;
using System.Threading;
using System.Text;
using System.IO;

// The RequestState class passes data across async calls.
public class RequestState
{
const int BufferSize = 1024;
public StringBuilder RequestData;
public byte[] BufferRead;
public WebRequest Request;
public Stream ResponseStream;
// Create Decoder for appropriate enconding type.
public Decoder StreamDecode = Encoding.UTF8.GetDecoder();

public RequestState()
{
BufferRead = new byte[BufferSize];
RequestData = new StringBuilder(String.Empty);
Request = null;
ResponseStream = null;
}
}

// ClientGetAsync issues the async request.
class ClientGetAsync
{
public static ManualResetEvent allDone = new
ManualResetEvent(false);
const int BUFFER_SIZE = 1024;

public static void Main(string[] args)
{
if (args.Length < 1)
{
showusage();
return;
}

// Get the URI from the command line.
Uri httpSite = new Uri(args[0]);

// Create the request object.
WebRequest wreq = WebRequest.Create(httpSite);

// Create the state object.
RequestState rs = new RequestState();

// Put the request into the state object so it can be passed
around.
rs.Request = wreq;

// Issue the async request.
IAsyncResult r = (IAsyncResult) wreq.BeginGetResponse(
new AsyncCallback(RespCallback), rs);

// Wait until the ManualResetEvent is set so that the application

// does not exit until after the callback is called.
allDone.WaitOne();

Console.WriteLine(rs.RequestData.ToString());
}

public static void showusage() {
Console.WriteLine("Attempts to GET a URL");
Console.WriteLine("\r\nUsage:");
Console.WriteLine(" ClientGetAsync URL");
Console.WriteLine(" Example:");
Console.WriteLine(" ClientGetAsync
http://www.contoso.com/");
}

private static void RespCallback(IAsyncResult ar)
{
// Get the RequestState object from the async result.
RequestState rs = (RequestState) ar.AsyncState;

// Get the WebRequest from RequestState.
WebRequest req = rs.Request;

// Call EndGetResponse, which produces the WebResponse object
// that came from the request issued above.
WebResponse resp = req.EndGetResponse(ar);

// Start reading data from the response stream.
Stream ResponseStream = resp.GetResponseStream();

// Store the response stream in RequestState to read
// the stream asynchronously.
rs.ResponseStream = ResponseStream;

// Pass rs.BufferRead to BeginRead. Read data into rs.BufferRead
IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0,

BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
}
private static void ReadCallBack(IAsyncResult asyncResult)
{
// Get the RequestState object from AsyncResult.
RequestState rs = (RequestState)asyncResult.AsyncState;

// Retrieve the ResponseStream that was set in RespCallback.
Stream responseStream = rs.ResponseStream;

// Read rs.BufferRead to verify that it contains data.
int read = responseStream.EndRead( asyncResult );
if (read > 0)
{
// Prepare a Char array buffer for converting to Unicode.
Char[] charBuffer = new Char[BUFFER_SIZE];

// Convert byte stream to Char array and then to String.
// len contains the number of characters converted to Unicode.
int len =
rs.StreamDecode.GetChars(rs.BufferRead, 0, read, charBuffer,
0);

String str = new String(charBuffer, 0, len);

// Append the recently read data to the RequestData
stringbuilder
// object contained in RequestState.
rs.RequestData.Append(
Encoding.ASCII.GetString(rs.BufferRead, 0, read));

// Continue reading data until
// responseStream.EndRead returns -1.
IAsyncResult ar = responseStream.BeginRead(
rs.BufferRead, 0, BUFFER_SIZE,
new AsyncCallback(ReadCallBack), rs);
}
else
{
if(rs.RequestData.Length>0)
{
// Display data to the console.
string strContent;
strContent = rs.RequestData.ToString();
}
// Close down the response stream.
responseStream.Close();
// Set the ManualResetEvent so the main thread can exit.
allDone.Set();
}
return;
}
}
Only thing is in main instead of processing one url i have one array
containing urls and i am starting processing of url at the same time.

thanks.

Dec 15 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Leo | last post: by
12 posts views Thread by ThyRock | last post: by
11 posts views Thread by Dave | last post: by
reply views Thread by Demi | last post: by
3 posts views Thread by Maya Sam | last post: by
reply views Thread by thomasabcd | last post: by
reply views Thread by APA | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.