ASP.NET中Response.BufferOutput的使用技巧

BufferOutput属性用于获取或设置一个值,该值指示是否缓冲输出并在处理完整个页之后发送它。该属性默认值是true,因此我们通常的页面中的输出内容都是在页面处理完成之后才发送给客户端由浏览器呈现出来。如果页面要处理的内容很多,可能很长时间才能看到页面上的内容。这个时候有两种方法可以让信息逐步显示,这样就能知道当前程序运行到哪一步了。

 

  方法1:BufferOutput默认值为true,这个时候可以借助Flush方法和Clear方法将当前缓冲区的信息输出。这个方法比较通用,当你的页面在处理一个复杂的程序的时候,可以即时输出一些提示信息。

 1           protected   void  Page_Load( object  sender, EventArgs e)
 2          {
 3               if  ( ! IsPostBack)
 4              {
 5                  ShowInfo( "中 " 100 );
 6                  Response.Flush();
 7                  Response.Clear();
 8                  Thread.Sleep( 1000 );
 9 
10                  ShowInfo( "国 " 5 );
11                  Response.Flush();
12                  Response.Clear();
13                  Thread.Sleep( 1000 );
14              }
15          }
16 
17           private   void  ShowInfo( string  it,  int  count)
18          {
19              StringBuilder sb  =   new  StringBuilder();
20               for  ( int  i  =   0 ; i  <  count; i ++ )
21              {
22                  sb.Append(it);
23              }
24              sb.Append( " <br/> " );
25              Response.Write(sb.ToString());
26          }

 

          方法2:把BufferOutput值设为false,这个时候缓冲区的内容会立即发送给客户端显示。这种方法有性能问题,因为没有使用缓冲输出,不过代码简洁一些。

 

         protected   void  Page_Load( object  sender, EventArgs e)
        {
            
if  ( ! IsPostBack)
            {
                Response.BufferOutput 
=   false ;

                ShowInfo(
"中 " 100 );
                Thread.Sleep(
1000 );

                ShowInfo(
"国 " 5 );
                Thread.Sleep(
1000 );
            }
        }

        
private   void  ShowInfo( string  it,  int  count)
        {
            StringBuilder sb 
=   new  StringBuilder();
            
for  ( int  i  =   0 ; i  <  count; i ++ )
            {
                sb.Append(it);
            }
            sb.Append(
" <br/> " );
            Response.Write(sb.ToString());
        }

 

          在使用的时候有两个问题需要注意:

    一是IE浏览器在缓冲区数据不少于256字节的情况下才会输出到客户端,经测试FF浏览器没有这个问题。

          二是UFT8编码的汉字一般占三个字节(Unicode编码是两个字节),这里第一次输出100个汉字是为了保证至少有256个字节的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值