C#利用System.Threading.Thread.Sleep即时输出信息的详解

有个网站需要生成静态页。
据以往经验,凡比较烂的空间,短时间内运行耗能大的运算,都会出现“service unavailable”,以致网页无法正常打开。
生成静态页,需要在短时间内读取大量的数据并保存为html页,好一些的空间运行起来没问题,就怕那些垃圾空间……
生成的时候,需要即时输出信息通知客户。

根据经验思考后,有两种方法可行:
1、每次只执行生成一个html页,然后输出信息给客户看,如“已生成首页,正在生成新闻页,请稍候..”,然后在输出的代码里放置上js代码,js代码可以隔2秒后再次刷新生成页,从而执行下一个html页的生成……直至完毕。

这个算法比较复杂,因为要生成的页面并不是统一类型的,比如有的是首页,有的是新闻页,有的是留言页……以及,要一次一次的记录生成到哪一步,所牵涉到的问题不少。
2、使用System.Threading.Thread.Sleep如果在挂起,间断性的生成html页,不造成短时间内耗能太大。但如果线程挂起的时候,仍然在消耗资源,则本方法不可用。

经过测试,System.Threading.Thread.Sleep挂起的时候,并不耗cpu和内存。可使用方法2生成html代码。并且不需要其它 任何设置,for循环1000次,System.Threading.Thread.Sleep设置为2秒,不会超时,也就是循环1000次,每次循环之 间暂停2秒钟,执行完需要:2*1000秒,不会超时。
简要程序代码:


代码如下:

//先通知客户,正在生成
Response.Write("正在生成文件,请稍候...");
Response.Flush();
//通过for循环生成各html页,此处仅为示例
for (int i = 0; i <= 1000; i++)
{
   //生成html代码略
   //通知
   Response.Write("XXX页生成成功,请等待下一页面生成...");
   Response.Flush();

//挂起2秒,2秒后进行下一个循环,以生成下一页
   System.Threading.Thread.Sleep(2 * 1000);
}
Response.Write("所有页面生成完毕");

(0)

相关推荐

  • c#线程Thread示例

    C#是一门支持多线程的语言,因此线程的使用也是比较常见的.由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的). 那么线程相关的问题大致有如下四类(这篇文章只讨论单线程.单线程与UI线程这两方面的问题).问题一,线程的基本操作,例如:暂停.继续.停止等:问题二,如何向线程传递参数或者从中得到其返回值:问题三,如何使线程所占用的CPU不要老是百分之百:最后一个,也是问题最多的,就是如何在子线程来控制UI中的控件,换句话说,就是在线

  • C#多线程ThreadPool线程池详解

    简单说明一下: 线程池可以看做容纳线程的容器:一个应用程序最多只能有一个线程池:ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相当于请求创建一个线程: 线程池的作用: 1.线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率. 2.如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜.),况且我们还不能控制线程池中线程的开始.挂起.和

  • C#多线程之Thread中Thread.Join()函数用法分析

    本文实例讲述了C#多线程之Thread中Thread.Join()函数用法.分享给大家供大家参考.具体分析如下: Thread.Join()在MSDN中的解释:Blocks the calling thread until a thread terminates 当NewThread调用Join方法的时候,MainThread就被停止执行, 直到NewThread线程执行完毕. Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));

  • C#多线程之Thread中Thread.IsAlive属性用法分析

    本文实例讲述了C#多线程之Thread中Thread.IsAlive属性用法.分享给大家供大家参考.具体如下: Thread.IsAlive属性 ,表示该线程当前是否为可用状态 如果线程已经启动,并且当前没有任何异常的话,则是true,否则为false Start()后,线程不一定能马上启动起来,也许CPU正在忙其他的事情,但迟早是会启动起来的! Thread oThread = new Thread(new ThreadStart(Back.Start)); oThread.Start();

  • C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    本文实例讲述了C#中Forms.Timer.Timers.Timer.Threading.Timer的用法分析,分享给大家供大家参考.具体分析如下: 在.NET Framework里面提供了三种Timer ① System.Windows.Forms.Timer ② System.Timers.Timer ③ System.Threading.Timer 现分述如下: 一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用

  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿

    说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行:对于比较耗时的操作(例如io,数据库操作),或者等待响应(如WCF通信)的操作,可以单独开启后台线程来执行,这样主线程就不会阻塞,可以继续往下执行:等到后台线程执行完毕,再通知主线程,然后做出对应操作! 在C#中开启新线程比较简单 static void Main(string[]

  • C#多线程之Thread类详解

    使用System.Threading.Thread类可以创建和控制线程. 常用的构造函数有: // 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托. // // 参数: // start: // System.Threading.ParameterizedThreadStart 委托,它表示此线程开始执行时要调用的方法. // // 异常: // System.ArgumentNullException: // star

  • C#利用System.Threading.Thread.Sleep即时输出信息的详解

    有个网站需要生成静态页.据以往经验,凡比较烂的空间,短时间内运行耗能大的运算,都会出现"service unavailable",以致网页无法正常打开.生成静态页,需要在短时间内读取大量的数据并保存为html页,好一些的空间运行起来没问题,就怕那些垃圾空间--生成的时候,需要即时输出信息通知客户. 根据经验思考后,有两种方法可行:1.每次只执行生成一个html页,然后输出信息给客户看,如"已生成首页,正在生成新闻页,请稍候..",然后在输出的代码里放置上js代码,j

  • Android利用Dom对XML进行增删改查操作详解

    1. 概述 平常我们一般是使用JSON与服务器做数据通信,JSON的话,直接用GSON或者其他库去解析很简单.但是,其他有些服务器会返回XML格式的文件,这时候就需要去读取XML文件了. XML的解析有三种方式,在Android中提供了三种解析XML的方式:DOM(Document Objrect Model) , SAX(Simple API XML) ,以及Android推荐的Pull解析方式,他们也各有弊端,而这里来看看使用DOM的方式. 2. Dom解析 DOM解析器在解析XML文档时,

  • java中 Set与Map排序输出到Writer详解及实例

     java中 Set与Map排序输出到Writer详解及实例 一般来说java.util.Set,java.util.Map输出的内容的顺序并不是按key的顺序排列的,但是java.util.TreeMap,java.util.TreeSet的实现却可以让Map/Set中元素内容以key的顺序排序,所以利用这个特性,可以将Map/Set转为TreeMap,TreeSet然后实现排序输出. 以下是实现的代码片段: /** * 对{@link Map}中元素以key排序后,每行以{key}={val

  • cmd命令的重定向输出 2>&1详解

    关于cmd命令的重定向输出 2>&1 mycommand >mylog.txt 2>&1 应该是最经典的用法了. 命令的结果可以通过"%>"的形式来定向输出,%表示文件描述符: 1为标准输出stdout.2为标准错误stderr. 系统默认%值是1,也就是"1>",而1>可以简写为>,也就是默认为>.stdout的默认目标是终端,stderr的默认目标为也是终端.我们在批处理中执行: echo text

  • PHP中的输出缓冲控制详解

    目录 清除输出 获得输出缓冲区的内容 刷新(输出)缓冲区内容 一些检测函数 使用 ob_start() 的回调函数来进行输出缓冲区的内容替换 添加 URL 重写器 总结 测试代码: 在 PHP 中,我们直接进行 echo . 或者 print_r 的时候,输出的内容就会直接打印出来.但是,在某些情况下,我们并不想直接打印,这个时候就可以使用输出缓冲控制来进行输出打印的控制.当然,这一套功能并不仅限出针对打印的内容,我们还可以做其它一些操作,这个我们放到最后再说. 清除输出 首先,我们先来看看不让

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • SpringBoot+WebSocket实现即时通讯的方法详解

    目录 环境信息 服务端实现 导入依赖 创建配置类 创建一个注解式的端点并在其中通过配套注解声明回调方法 服务端主动发送消息给客户端 客户端实现 Java客户端实现 在前端环境(vue)中使用websocket 环境信息 名称 版本号 Spring Boot 2.4.5 Idea 2021.3.2 服务端实现 导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp

  • Python Thread虚假唤醒概念与防范详解

    目录 什么是虚假唤醒 现在改用4个线程 使用20个线程同时跑 现在改用while进行判断 总结 什么是虚假唤醒 虚假唤醒是一种现象,它只会出现在多线程环境中,指的是在多线程环境下,多个线程等待在同一个条件上,等到条件满足时,所有等待的线程都被唤醒,但由于多个线程执行的顺序不同,后面竞争到锁的线程在获得时间片时条件已经不再满足,线程应该继续睡眠但是却继续往下运行的一种现象. 上面是比较书面化的定义,我们用人能听懂的话来介绍一下虚假唤醒. 多线程环境的编程中,我们经常遇到让多个线程等待在一个条件上,

  • MyBatis输入映射和输出映射实例详解

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的

  • js控制台输出的方法(详解)

    console.log(object[, object, ...]) 在控制台输出一条消息.如果有多个参数,输出时会用空格隔开这些参数. 第一个参数可以是一个包含格式化占位符输出的字符串,例如: console.log("The %s jumped over %d tall buildings", animal, count); 上面的例子可以用下面的无格式化占位符输出的代码替换: console.log("The", animal, "jumped ov

随机推荐