读书人

【CUP使用率100% 】关于每隔 100 毫秒

发布时间: 2012-02-25 10:01:49 作者: rapoo

【CUP使用率100% 】关于每隔 100 毫秒 发出的 100 个异步Http请求,如何提高速度和系统性能?
class RequestState
{
public HttpWebRequest request;
public int roomid;
public DateTime sent;
public RequestState(HttpWebRequest r, int id)
{
sent = DateTime.Now;
request = r;
roomid = id;
}
}
void HttpResponseReturned(IAsyncResult ar)
{
RequestState rstate = (RequestState)ar.AsyncState;
HttpWebResponse response = (HttpWebResponse)rstate.request.EndGetResponse(ar);
Console.WriteLine(string.Format( "收到{0}发出的异步Http请求(RoomID={1}) ", rstate.sent, rstate.roomid));
Encoding enc = Encoding.GetEncoding(response.CharacterSet);
using (Stream rstream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(rstream, enc))
{
string html = reader.ReadToEnd();
/*
处理html
*/
}
}



}

int kksdf=0;
const int roomidmax = 100;
const int roomidmin = 1;
const string urlbase = "http://community.csdn.net/Expert/ForumList.asp?typenum=1&roomid= ";//CSDN.net区

void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
kksdf++;
// this.toolStripStatusLabel2.Text = kksdf.ToString();
for (int i = roomidmin; i <= roomidmax; ++i)
{
//this.toolStripStatusLabel2.Text = DateTime.Now.ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlbase + i.ToString());
request.Method = "Get ";
RequestState rstate = new RequestState(request, i);
request.BeginGetResponse(HttpResponseReturned, rstate);
}
}
void LoadMain()
{
System.Timers.Timer timerOut = new System.Timers.Timer(100);
timerOut.Elapsed += Timer_Elapsed;
timerOut.Start();
//Console.ReadKey();
}


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++


汗,以上代码,启动winform项目后cpu使用率占100% ?(控制台占用很小)


[解决办法]
用了DotNet那么多年,没发现ASP.NET有什么问题.
ASP.NET是重新设计的. 而且是经过严格测试.
虽然现在ASP.NET2.0了,但是我也是慢慢才明白ASP.NET1.0一些核心的东西.
我很佩服微软工程师的远见.

可以说DotNet容易上手,但是如果没有足够的经验,还是会遇到很多问题的.
但是如果没有能力解决问题, 就推卸为DotNet的BUG, 不敢苟同.



无论是哪一种语言,框架, 都有其内在的特点, 都需要大量的经验才能用得得心应手.

在不够经验的情况下,DotNet还是比较安全的.
像PHP那样把QUERYSTRING都弄成变量那个愚蠢的设计,会害死很多新手的.

读书人网 >.NET

热点推荐