zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    ThinkPHP 3 的CURD管理用户信息 修改和删除
    检测一个字符串是否为一个有效的编码格式字符串
    将Buffer对象结合创建为一个新的Buffer对象
    Buffer.byteLength(字符串,编码方式)计算指定字符串的字节数
    TypeError: Buffer.allocUnsafe is not a function
    多个haproxy 之间跳转
    TypeError: Identifier 'assert' has already been declared
    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间
    14.5.5 Creating a File-Per-Table Tablespace Outside the Data Directory
    php session 管理
  • 原文地址:https://www.cnblogs.com/Dream/p/1167.html
Copyright © 2011-2022 走看看