菜鸟正在打算写一个类似"推"技术的ASP.NET聊天室.找了N多资料无果.打算用多线程处理+一个永远下载不完的页面来完成聊天室里面的消息发送和聊天室成员等处理. 当然这个性能好像也不怎样. 用AJAX拉的话,达不到即时的效果.更新频繁了也是一个瓶颈.如果大虾们有更好的建议,多加分.以下是测试可行性页面后台: service.aspx.cs:
private void Page_Load(object sender, System.EventArgs e)
{
Response.Buffer = true;
ThreadStart ts = new ThreadStart(Comet);
Thread t = new Thread(ts);
t.Start();
while(true)
{
Thread.Sleep(600000);
}
}
void Comet()
{
while(true)
{
Response.Write(DateTime.Now.ToString("HH:mm:ss."));
Response.Flush();
Thread.Sleep(1000);
}
}1.IE7和FF3打开service.aspx页面都要花很长的时间(大约30秒)才能显示里面的内容,请问有什么好的解决方案.
2.测试IE开了5个页面没有问题,能够显示数据, 但是FF只能够开1个页面有数据.
3.我用HTML页面AJAX调用 readyState==3 的时候来获取数据.FF下面能够很及时的更新数据.但是IE不支持readyState==3,请问怎样改进???(有改进法追加分.)
4.如果有性能改进的方案最好.
private void Page_Load(object sender, System.EventArgs e)
{
Response.Buffer = true;
ThreadStart ts = new ThreadStart(Comet);
Thread t = new Thread(ts);
t.Start();
while(true)
{
Thread.Sleep(600000);
}
}
void Comet()
{
while(true)
{
Response.Write(DateTime.Now.ToString("HH:mm:ss."));
Response.Flush();
Thread.Sleep(1000);
}
}1.IE7和FF3打开service.aspx页面都要花很长的时间(大约30秒)才能显示里面的内容,请问有什么好的解决方案.
2.测试IE开了5个页面没有问题,能够显示数据, 但是FF只能够开1个页面有数据.
3.我用HTML页面AJAX调用 readyState==3 的时候来获取数据.FF下面能够很及时的更新数据.但是IE不支持readyState==3,请问怎样改进???(有改进法追加分.)
4.如果有性能改进的方案最好.
{
Thread.Sleep(600000);
}
是不是这个的原因?
将Thread.Sleep(600000)改成Thread.Sleep(100);响应速度大约1秒,去掉更快,但是逻辑上不可能,改成1秒后,就等待N久.用变量判断第一次输出的时候不用sleep 也不行..
private static int bFirst = 0;
private void Page_Load(object sender, System.EventArgs e)
{
Response.Clear();
while(Response.IsClientConnected)
{
//Thread.Sleep(100);
Response.Clear();
Response.Write("123123123123123123123123123123123123123123");
Response.Flush();
if(bFirst<30)
{
bFirst++;
}
else
{
Response.Write(DateTime.Now.ToString("HH:mm:ss.")+"<br>");
Response.Flush();
Thread.Sleep(1000);
}
}
}
经过测试:Response.Write("123123123123123123123123123123123123123123");是非常的必要.如果这里设置输出为空就会等待N长时间,猜测应该是有一个输出字符串界限长度,超过了这个输出长度,将快速执行以后的操作.
但是发现一个问题: 第一次打开网页速度很快,但是第二次后仍然漫长的等待了.
输出字符串界限相应长度大概是205.为200 的时候会有3秒的页面等待.请高手们帮我解决问题3 .谢谢了..追加分3.我用HTML页面AJAX调用 readyState==3 的时候来获取数据.FF下面能够很及时的更新数据.但是IE不支持readyState==3,请问怎样改进???(有改进法追加分.)