C#利用System.Threading.Thread.Sleep即時(shí)輸出信息的詳解
更新時(shí)間:2013年06月05日 14:49:24 作者:
本篇文章是對(duì)C#利用System.Threading.Thread.Sleep即時(shí)輸出信息進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
有個(gè)網(wǎng)站需要生成靜態(tài)頁(yè)。
據(jù)以往經(jīng)驗(yàn),凡比較爛的空間,短時(shí)間內(nèi)運(yùn)行耗能大的運(yùn)算,都會(huì)出現(xiàn)“service unavailable”,以致網(wǎng)頁(yè)無(wú)法正常打開(kāi)。
生成靜態(tài)頁(yè),需要在短時(shí)間內(nèi)讀取大量的數(shù)據(jù)并保存為html頁(yè),好一些的空間運(yùn)行起來(lái)沒(méi)問(wèn)題,就怕那些垃圾空間……
生成的時(shí)候,需要即時(shí)輸出信息通知客戶(hù)。
根據(jù)經(jīng)驗(yàn)思考后,有兩種方法可行:
1、每次只執(zhí)行生成一個(gè)html頁(yè),然后輸出信息給客戶(hù)看,如“已生成首頁(yè),正在生成新聞頁(yè),請(qǐng)稍候..”,然后在輸出的代碼里放置上js代碼,js代碼可以隔2秒后再次刷新生成頁(yè),從而執(zhí)行下一個(gè)html頁(yè)的生成……直至完畢。
這個(gè)算法比較復(fù)雜,因?yàn)橐傻捻?yè)面并不是統(tǒng)一類(lèi)型的,比如有的是首頁(yè),有的是新聞頁(yè),有的是留言頁(yè)……以及,要一次一次的記錄生成到哪一步,所牽涉到的問(wèn)題不少。
2、使用System.Threading.Thread.Sleep如果在掛起,間斷性的生成html頁(yè),不造成短時(shí)間內(nèi)耗能太大。但如果線(xiàn)程掛起的時(shí)候,仍然在消耗資源,則本方法不可用。
經(jīng)過(guò)測(cè)試,System.Threading.Thread.Sleep掛起的時(shí)候,并不耗cpu和內(nèi)存??墒褂梅椒?生成html代碼。并且不需要其它 任何設(shè)置,for循環(huán)1000次,System.Threading.Thread.Sleep設(shè)置為2秒,不會(huì)超時(shí),也就是循環(huán)1000次,每次循環(huán)之 間暫停2秒鐘,執(zhí)行完需要:2*1000秒,不會(huì)超時(shí)。
簡(jiǎn)要程序代碼:
//先通知客戶(hù),正在生成
Response.Write("正在生成文件,請(qǐng)稍候...");
Response.Flush();
//通過(guò)for循環(huán)生成各html頁(yè),此處僅為示例
for (int i = 0; i <= 1000; i++)
{
//生成html代碼略
//通知
Response.Write("XXX頁(yè)生成成功,請(qǐng)等待下一頁(yè)面生成...");
Response.Flush();
//掛起2秒,2秒后進(jìn)行下一個(gè)循環(huán),以生成下一頁(yè)
System.Threading.Thread.Sleep(2 * 1000);
}
Response.Write("所有頁(yè)面生成完畢");
據(jù)以往經(jīng)驗(yàn),凡比較爛的空間,短時(shí)間內(nèi)運(yùn)行耗能大的運(yùn)算,都會(huì)出現(xiàn)“service unavailable”,以致網(wǎng)頁(yè)無(wú)法正常打開(kāi)。
生成靜態(tài)頁(yè),需要在短時(shí)間內(nèi)讀取大量的數(shù)據(jù)并保存為html頁(yè),好一些的空間運(yùn)行起來(lái)沒(méi)問(wèn)題,就怕那些垃圾空間……
生成的時(shí)候,需要即時(shí)輸出信息通知客戶(hù)。
根據(jù)經(jīng)驗(yàn)思考后,有兩種方法可行:
1、每次只執(zhí)行生成一個(gè)html頁(yè),然后輸出信息給客戶(hù)看,如“已生成首頁(yè),正在生成新聞頁(yè),請(qǐng)稍候..”,然后在輸出的代碼里放置上js代碼,js代碼可以隔2秒后再次刷新生成頁(yè),從而執(zhí)行下一個(gè)html頁(yè)的生成……直至完畢。
這個(gè)算法比較復(fù)雜,因?yàn)橐傻捻?yè)面并不是統(tǒng)一類(lèi)型的,比如有的是首頁(yè),有的是新聞頁(yè),有的是留言頁(yè)……以及,要一次一次的記錄生成到哪一步,所牽涉到的問(wèn)題不少。
2、使用System.Threading.Thread.Sleep如果在掛起,間斷性的生成html頁(yè),不造成短時(shí)間內(nèi)耗能太大。但如果線(xiàn)程掛起的時(shí)候,仍然在消耗資源,則本方法不可用。
經(jīng)過(guò)測(cè)試,System.Threading.Thread.Sleep掛起的時(shí)候,并不耗cpu和內(nèi)存??墒褂梅椒?生成html代碼。并且不需要其它 任何設(shè)置,for循環(huán)1000次,System.Threading.Thread.Sleep設(shè)置為2秒,不會(huì)超時(shí),也就是循環(huán)1000次,每次循環(huán)之 間暫停2秒鐘,執(zhí)行完需要:2*1000秒,不會(huì)超時(shí)。
簡(jiǎn)要程序代碼:
復(fù)制代碼 代碼如下:
//先通知客戶(hù),正在生成
Response.Write("正在生成文件,請(qǐng)稍候...");
Response.Flush();
//通過(guò)for循環(huán)生成各html頁(yè),此處僅為示例
for (int i = 0; i <= 1000; i++)
{
//生成html代碼略
//通知
Response.Write("XXX頁(yè)生成成功,請(qǐng)等待下一頁(yè)面生成...");
Response.Flush();
//掛起2秒,2秒后進(jìn)行下一個(gè)循環(huán),以生成下一頁(yè)
System.Threading.Thread.Sleep(2 * 1000);
}
Response.Write("所有頁(yè)面生成完畢");
相關(guān)文章
c# Bitmap轉(zhuǎn)bitmapImage高效方法
本文主要介紹了c# Bitmap轉(zhuǎn)bitmapImage高效方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C#快速實(shí)現(xiàn)IList非泛型類(lèi)接口的自定義類(lèi)作為數(shù)據(jù)源
本文主要介紹了C#快速實(shí)現(xiàn)IList非泛型類(lèi)接口的自定義類(lèi)作為數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法
這篇文章主要介紹了C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08
C#將指定目錄所有文件名轉(zhuǎn)換成小寫(xiě)的方法
這篇文章主要介紹了C#將指定目錄所有文件名轉(zhuǎn)換成小寫(xiě)的方法,涉及C#中目錄的遍歷及filename.ToLowerInvariant方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04

