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

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

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

         protected void Page_Load(object sender, EventArgs e)
         {
             if (!IsPostBack)
             {
                 ShowInfo("中", 100);
                 Response.Flush();
                 Response.Clear();
                 Thread.Sleep(1000);

                 ShowInfo("国", 5);
                 Response.Flush();
                 Response.Clear();
                 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());
         }

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET轻量级MVC框架Nancy的基本用法

    模块 Nancy的模块的概念类似于Asp.net中的Controller,一个典型的示例如下: public class Module : NancyModule { public Module() { Get["/greet"] = x => "hello world"; } } 它定义了一个模块,并且定义了该模块下的一个Get操作.Nacy的模块需要继承自NancyModule ,服务器启动时默认会通过反射加载所有程序集下的NancyModule,包括各个

  • ASP.NET Core通用主机实现托管服务

    前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了..net core提供了一个通用的后台服务接口IHostedService,称为托管服务.一个注册托管服务的示例如下: hostBuilder.ConfigureServices((hostContext, services) => { services.AddHostedService<LifetimeEventsHostedService>(); services.AddHostedSer

  • Asp.net core利用dynamic简化数据库访问

    今天写了一个数据库的帮助类,代码如下. public static class DbEx { public static dynamic ReadToObject(this IDataReader reader) { var obj = new DbObject(); for (int i = 0; i < reader.FieldCount; i++) { obj[reader.GetName(i)] = new DbField() { DbData = reader[i] }; } retu

  • asp.net中MVC的处理流程详解

    asp.net MVC 分为主要的Controller .Action.以及Views 下面来分析Asp.net MVC的处理流程: Controller 负责将获取Model数据并将Model传递个View对象,通知View对象显示. 处理流程: 1.用户发起请求--->UrlRouting获取请求—>MvcRouteHandler.GetHttpHandler()—>MvcHandler.ProcessRequest() 2.UrlRouting获取浏览器发起的请求 将RoutDat

  • ASP.NET Core中的对象池介绍

    asp.net core中通过扩展库的方式提供给了一个标准的对象池ObjectPool,定义在Microsoft.Extensions.ObjectPool.dll 程序集中.它本身是个纯虚的抽象类,它就定义了两个接口函数,实现如下 public abstract class ObjectPool<T> where T : class { public abstract T Get(); public abstract void Return(T obj); } 这是一个比较典型的对象池接口:

  • ASP.NET Core通用主机的系统配置

    ASP.NET Core 2.0 中的 WebHost(实现 IWebHost 的基类)是用于为进程提供 HTTP 服务器功能的基础结构项目,例如,如果正在实现 MVC Web 应用或 Web API 服务. 它提供 ASP.NET Core 中所有新的基础结构优点,使用户能够使用依赖关系注入,在请求管道中插入中间件等,并精确地将这些 IHostedServices 用于后台任务. .NET Core 2.1 中引入了 Host(实现 IHost 的基类). 它能让用户拥有与 WebHost相似

  • ASP.NET Core的日志系统介绍

    .net core是内置了日志系统的,本文这里简单的介绍一下它的基本用法.如下是一个简单的示例: var service = new ServiceCollection() .AddLogging(logging => { logging.AddConsole(); }); var provider = service.BuildServiceProvider(); var logFactory = provider.GetService<ILoggerFactory>(); var l

  • ASP.NET Core配置设置之Configuration包

    ASP.NET Core 中提供了一个Configuration 包,用以应用配置基于配置提供程序建立的键值对.这里以json文件配置的方式,简单的介绍一下它的用法. 首先定义一个配置文件appsettings.json: { "key1": "value1", "key2": -1, "subsection": { "key1": "value2", "key2":

  • ASP.NET中的Razor语法简介

    目录 一.Razor 语法 1. Razor C# 语法规则 2.Razor的作用域 3.Razor和Html混合编写 4.变量 5.数据类型 6.转换数据类型(string类型才能转) 7.循环 8.数组 9.逻辑条件 二.Razor引擎 1.布局(Layout)(@RenderBody()方法) 2.页面(@RenderPage()方法) 3.Section区域(@RenderSection()) 三.Razor 帮助器 自定义Helper Razor 不是一种编程语言.它是服务器端的标记语

  • Asp.net core实现PushStream视频流推送

    最近用asp.net core webapi实现了一个实时视频流的推送功能,在Asp.net中,这个是通过PushStreamContent来实现的. 基于对asp.net core的知识,随手写了一个(要求控制器继承自Controller基类) [HttpGet] public async Task Get() { var response = HttpContext.Response; response.ContentType = "text/html"; response.Sta

  • 在Asp.net core中实现websocket通信

    今天小试了一下在Asp.net core中使用websocket,这里记录一下: 在 Startup 类的 Configure 方法中添加 WebSocket 中间件. app.UseWebSockets(); 它也可以传入一些参数 app.UseWebSockets(new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(120), ReceiveBufferSize = 4 * 1024 }); 添加WebSocke

  • ASP.Net Core基于ABP架构配置To Json序列化

    一. 前言 我们采用ABP架构用MVC Controller或Web API返回给前端结果ToJson序列化后得到的属性命名都是采用js的驼峰格式,即首字母小写,后面单词首字母大写的格式(如:后台属性名为OrderName,返回的前端js为orderName).但在实际项目开发中由于某种原因(比如给老系统提供接口或现有系统集成等)需要采用给后台属性名一致或自己特定的格式,下面就介绍一下基于ABP架构ToJson如何修改默认配置和自定义配置. 二. 修改ToJson序列化默认配置 在Startup

随机推荐