2011-03-11 86 views
1

我在承載多個asp.net應用程序的Web服務器上的響應時間很慢。我不會預編譯我的應用程序,所以我知道第一次請求應用程序需要一些時間來加載(5到10秒)。但是,如果應用程序閒置一段時間(20-30分鐘),即使我已將IIS 7.5中的應用程序池的「空閒超時」設置爲0,響應仍然很慢。因此,我正在考慮編寫一項Windows服務,每隔10分鐘向各個應用程序發送請求以保持它們的活力。我的問題是JIT編譯器如何處理應用程序中的子目錄。當您請求單個頁面時,JIT編譯器是否爲應用程序編譯所有代碼,還是隻處理當前請求?ASP.Net JIT編譯器

因此,當我編寫Windows服務時,我可以嚮應用中的單個頁面發送請求,還是需要向每個子目錄中的頁面發送請求?

謝謝。

+0

這是一個ASP.NET應用程序或ASP.NET網站項目?另外,爲什麼你不預編譯你的應用程序? – 2011-03-11 03:19:18

+0

這些是ASP.NET網站。我不預先編譯這些網站,因爲我希望在必要時可以直接在服務器上進行更改。 – kyletme 2011-03-11 16:59:41

回答

0

模型ASP.NET通常使用創建App_Code目錄中的內容單獨的組件,以及在Global.asax文件,然後編譯所有的.aspx頁面的每個目錄到一個單獨的組件(根據要求)。

用戶控件和母版頁也通常獨立於.aspx頁編譯。我假設你在部署時使用「可更新」選項。在這種情況下

  1. App_Code文件夾被在 部署時編譯
  2. 爲的.aspx和母版頁文件的代碼隱藏在部署時
  3. 編譯對於每個目錄 - 文件後面的所有代碼被編譯成獨立的部署時的組件
  4. 如果您有global.asax,那麼會在第一個請求時編譯
  5. 所有ascx和.master文件在請求(按文件夾)時都會編譯爲單獨的程序集。

因此,鑑於上述情況,您必須向每個文件夾中的至少一個頁面發出請求,以保持網站「熱」。

如果您使用了「固定名稱」選項,那麼您將擁有更多的程序集,但是此選項也是您希望能夠更新.aspx文件時的最佳選擇。但一定要測試您的網站並在生產服務器上編譯性能。

0

看看這個:

新的「自動啓動」的 ASP.NET 4和IIS 7.5提供了一個 定義良好的方法,可以讓你 進行昂貴的應用程序 啓動功能和在任何最終用戶點擊您的 應用程序之前運行的預緩存邏輯可以運行 。這使您可以從一開始就讓您的應用「熱身」並準備好 ,並提供一致的高性能 體驗。

Auto-Start ASP.NET Applications (VS 2010 and .NET 4.0 Series)

+0

感謝里克,但應用程序不在4.0。他們在3.0和3.5。 – kyletme 2011-03-11 03:30:29