欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

利用ASP.NET中Response.BufferOutput实现异步显示

创建时间:2011年09月03日 17:29  阅读次数:(34235)
分享到:
我们先了解一下BufferOutput属性:
BufferOutput属性用于获取或设置一个值,该值指示是否缓冲输出并在处理完整个页之后发送它。默认值是true,因此我们默认情况下我们的.Net都是全部缓冲完了才在浏览器上显示出来。这样就有可能在我们的页面执行时间很长的情况下页面会一直处于空白状态,让用户以为我们的页面打不开了而关掉浏览器。这时候我们可以让页面执行一部分就显示一部分,好让用户知道我们的页面执行到那一步了。 

解决方案一:
BufferOutput默认值为true,我们不改变这个设置值,利用Response.Flush方法和Clear方法将当前缓冲区的信息输出。这个方法比较普遍,也不会很影响性能,当页面在处理一个复杂的程序的时候,可以即时输出一些提示信息。

解释一下用到的两个方法:
Response.Flush() 立即输出缓冲区的数据
Response.Clear() 清空缓冲区的数据

示例:
protected void Page_Load(object sender, EventArgs e)
   {
     if (!IsPostBack)
     {
        ShowMessage("你", 150);
        Response.Flush();
        Response.Clear();
        Thread.Sleep(1000);

        ShowMessage("好", 150);
        Response.Flush();
        Response.Clear();
        Thread.Sleep(1000);
      }
     }

private void ShowMessage(string s, int count)
     {
       StringBuilder str= new StringBuilder();
       for (int i = 0; i < count; i++)
       {
          str.Append(s);
       }
       Response.Write(str.ToString());
      }


解决方案一:
把BufferOutput值设为false,这时间服务器执行一行就发送一行数据到客户端,也就是即时显示信息。但注意,这样会很影响性能,因为这样,数据就没有在服务器缓存了。

示例:
protected void Page_Load(object sender, EventArgs e)
   {
     if (!IsPostBack)
     {
        Response.BufferOutput = false;
        ShowMessage("你", 150);
        Thread.Sleep(1000);

        ShowMessage("好", 150);
        Thread.Sleep(1000);
      }
     }

private void ShowMessage(string s, int count)
     {
       StringBuilder str= new StringBuilder();
       for (int i = 0; i < count; i++)
       {
          str.Append(s);
       }
       Response.Write(str.ToString());
      }


注意:
1,即使设置了BufferOutput值设为false,也要在缓冲区数据不少于256字节的情况下才会输出到客户端,经测试FF浏览器没有这个问题。
2,UFT8编码的汉字一般占三个字节(Unicode编码是两个字节),所以我们在上例中循环输出150个字符,而不是50个,因为50个就有可能看不到效果。'
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:匿名  评论时间:2011-9-5 19:11:18
  • 站长细节处理的很好,我们的可阅读性很强,谢谢站长了.
发表评论:
留言人:
内  容:
请输入问题 9+37=? 的结果(结果是:46)
结  果: