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个字节的数据。

 

posted @   梦想天空(山边小溪)  阅读(4153)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示