ASP.NET Pre-Compilation and Keep-Alive
2004-02-11 11:53
429 查看
1、Pre-Compilation in Whidbey
ASP.NET一大特色就是Dynamic Compilation,但是有些場合Pre-Compilation卻是更好的選擇,比如,你不想訪問你的站點的第一個用戶癡癡的等待,或者你根本不想把任何源碼(包括HTML的內容)給你的用戶。
Pre-Compilation在ASP.NET 2.0中支援得很徹底,你可以選擇In-Place Pre-Compilation,只需要你訪問一下: http://站點名稱/WebApp名稱/PreCompile.axd 系統就會將WebApp裏面所有的頁面先給你編譯一遍。
或者,更加徹底的方式,PreCompilation for Deployment,.Net Framework 2.0提供了一個命令行的工具(aspnet_compiler.exe),讓你將WebApp中所有的代碼、頁面(包括HTML)、靜態檔全部編譯進dll,然後給你一個“Deployment-Ready WebApp”,No Code、No Html,呵呵,但是流覽起來和普通的WebApp沒有區別。
這篇文章包含了更多的資訊。
2、Pre-Compilation and Keep-Alive in .NET Framework 1.1
Whidbey畢竟是明年的事,其實在現在,我們也可以想一些辦法。
Global.asax裏面的那個Global類是繼承自HttpApplication的,我們可以自己插入一個中間層,來做一些自己的事情。比如我們創建一個PreGlobal類,繼承自HttpApplication,在PreGlobar.Init()方法中,創建一個新的線程,讓這個線程遍曆訪問WebApp中所有的.aspx和.ascx(對ascx就LoadControl(),對aspx就HttpWebRequest.Create(url).GetResponse()),這樣可以實現我們自己的“Pre-Compilation”,然後再讓Global繼承自我們自己的這個PreGlobal就可以了。
我們可以感覺到,如果一段時間沒有訪問WebApp,那麼當再次訪問時,速度大大降低,這是因為Clr會自動將站點的Assembly從記憶體中Unload,當再次訪問時,再載入Assembly,而這個動作是相當耗時的(想想在電腦上運行一個WinForm,它的啟動時間)。我們需要想一個辦法讓我們的WebApp始終Keep-Alive,這樣Clr就不會將它Unload了。方法還是PreGlobal.Init()方法,我們在這個方法中創建一個Timer物件,定時時間小於默認的Session過期時間即可,在其Elapsed事件中調用一下“HttpWebRequest.Create(站點url).GetResponse()”就可以讓我們的站點始終Alive了。
ASP.NET一大特色就是Dynamic Compilation,但是有些場合Pre-Compilation卻是更好的選擇,比如,你不想訪問你的站點的第一個用戶癡癡的等待,或者你根本不想把任何源碼(包括HTML的內容)給你的用戶。
Pre-Compilation在ASP.NET 2.0中支援得很徹底,你可以選擇In-Place Pre-Compilation,只需要你訪問一下: http://站點名稱/WebApp名稱/PreCompile.axd 系統就會將WebApp裏面所有的頁面先給你編譯一遍。
或者,更加徹底的方式,PreCompilation for Deployment,.Net Framework 2.0提供了一個命令行的工具(aspnet_compiler.exe),讓你將WebApp中所有的代碼、頁面(包括HTML)、靜態檔全部編譯進dll,然後給你一個“Deployment-Ready WebApp”,No Code、No Html,呵呵,但是流覽起來和普通的WebApp沒有區別。
這篇文章包含了更多的資訊。
2、Pre-Compilation and Keep-Alive in .NET Framework 1.1
Whidbey畢竟是明年的事,其實在現在,我們也可以想一些辦法。
Global.asax裏面的那個Global類是繼承自HttpApplication的,我們可以自己插入一個中間層,來做一些自己的事情。比如我們創建一個PreGlobal類,繼承自HttpApplication,在PreGlobar.Init()方法中,創建一個新的線程,讓這個線程遍曆訪問WebApp中所有的.aspx和.ascx(對ascx就LoadControl(),對aspx就HttpWebRequest.Create(url).GetResponse()),這樣可以實現我們自己的“Pre-Compilation”,然後再讓Global繼承自我們自己的這個PreGlobal就可以了。
我們可以感覺到,如果一段時間沒有訪問WebApp,那麼當再次訪問時,速度大大降低,這是因為Clr會自動將站點的Assembly從記憶體中Unload,當再次訪問時,再載入Assembly,而這個動作是相當耗時的(想想在電腦上運行一個WinForm,它的啟動時間)。我們需要想一個辦法讓我們的WebApp始終Keep-Alive,這樣Clr就不會將它Unload了。方法還是PreGlobal.Init()方法,我們在這個方法中創建一個Timer物件,定時時間小於默認的Session過期時間即可,在其Elapsed事件中調用一下“HttpWebRequest.Create(站點url).GetResponse()”就可以讓我們的站點始終Alive了。
相关文章推荐
- Writing ASP.NET Web Forms with C#
- ASP.NET 验证机制
- ASP.NET中的事务处理和异常处理
- 最佳ASP.NET编程习惯
- ASP.NET图象处理详解
- ASP.NET读取POP3邮件的操作
- ASP.NET上传文件的实例
- 用ASP.NET上传图片并生成带版权信息的缩略图
- ASP.NET编程中的十大技巧
- login.aspx xml 验正
- ASP.NET 中数据库操作初步
- 用asp.net画饼图(可用于各种投票程序)
- VS.NET中复制ASP.NET文件的问题
- ASP自定义函数,仿VBA中域函数 DLookup
- 基于asp.net的webmenu的数据操作(5)
- 基于asp.net的webmenu的数据操作(2)
- 基于asp.net的webmenu的数据操作(3)
- asp.net上传文件图片的做法
- asp.net默认只允许上传4m的文件,如果上传更大的?
- 域名Whois信息查询(ASP.NET+C#)