菜鸟正在打算写一个类似"推"技术的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.如果有性能改进的方案最好.

解决方案 »

  1.   

    之前在研究缓存的问题,有一种想法不知道可不可以,你可以在聊天数据更新的时候更新一下缓存,页面再用定时事件配合ajax调取数据,紧供参考,我自己也不知道行不行,有空去做一下
      

  2.   

    额....这个没弄过,只弄过mfc的...
      

  3.   

    while(true)
    {
            Thread.Sleep(600000);
    }
    是不是这个的原因?
      

  4.   

    回楼上: 经测试,确实是Thread.Sleep(600000); 的问题.
    将Thread.Sleep(600000)改成Thread.Sleep(100);响应速度大约1秒,去掉更快,但是逻辑上不可能,改成1秒后,就等待N久.用变量判断第一次输出的时候不用sleep 也不行..
      

  5.   

    修改代码:
    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长时间,猜测应该是有一个输出字符串界限长度,超过了这个输出长度,将快速执行以后的操作.
    但是发现一个问题: 第一次打开网页速度很快,但是第二次后仍然漫长的等待了.
      

  6.   

    将private static int bFirst = 0; 改成 非静态的 打开网页就很快了...
      

  7.   

    1.IE7和FF3打开service.aspx页面都要花很长的时间(大约30秒)才能显示里面的内容,请问有什么好的解决方案. 回答问题1:经过测试: Response.Write("123123123123123123123123123123123123123123")
    输出字符串界限相应长度大概是205.为200 的时候会有3秒的页面等待.请高手们帮我解决问题3 .谢谢了..追加分3.我用HTML页面AJAX调用 readyState==3 的时候来获取数据.FF下面能够很及时的更新数据.但是IE不支持readyState==3,请问怎样改进???(有改进法追加分.) 
      

  8.   

    IE不支持readyState=3,但是IE支持htmlfile这个特殊的ActiveX组件,你可以在IE里面创建这个组件,然后就能获得和readyState=3一样的效果,详细自己搜索材料看看吧。关于comet的文章,网上够多的了。