• ASP.NET PreCompilation and KeepAlive



    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了。

  • 相关阅读:
    GroupCoordinator机制
    Consumer 机制
    Producer机制
    Kafka总体介绍
    为什么使用kafka
    消息队列中点对点与发布订阅区别
    为什么使用消息系统
    人生的诗·290~294节
    唐诗宋词学习·141~145节
    人生的诗·295~299节
  • 原文地址:https://www.cnblogs.com/Dream/p/1167.html
Copyright © 2020-2023  润新知