2008-11-08 28 views
6

我在微軟文檔的某處看到,ASP.NET的web.config的內容被緩存了。如果是這樣,其中它被緩存 - 在內存或磁盤ASP.NET:web.config在何處/如何緩存?

還有一個後續問題:如果我必須密集訪問web.config,是否有任何性能考慮因素需要考慮?

回答

7

它在內存中緩存,緩存在磁盤上沒有任何意義,它已經在磁盤上。

首先,在ASP.NET中,您希望通過HttpContext對象的GetSection方法(此方法使用由ASP.NET管理的緩存副本)來訪問配置節。

訪問配置值的性能是Section對象(由GetSection返回的對象)的內部實現的函數。一個ConfigurationSection可以簡單地作爲一個DOM節點的包裝器,它可以在每個屬性請求上讀取它。它可以內部緩存價值並觀察變化。

我的建議是保持您的代碼簡單,只需通過GetSection訪問您需要的值,而不是嘗試在其他地方保留它們的副本,但通過所有方法在請求期間保持對由GetSection返回的對象的引用。你將從中獲取多個值。

+0

磁盤上可能是一個序列化的方式......好吧,好吧,這很愚蠢,我知道。沒有想到我寫了那個...... :-) – splattne 2008-11-08 16:27:15

+0

等等......我瘋了嗎?我正在查看RedGate反射器中的HttpContext.GetSection,它看起來像在內部調用ConfigurationManager.GetSection,它看起來不像是緩存任何東西。請讓我知道我是否遺漏了一些東西。 – 2012-06-19 18:18:21

1

我認爲web.config緩存在內存中(在System.Web.Configuration的對象實例中)。當.config文件更改時重新加載這些文件(從而重新加載您的Web應用程序)。

擊中這些對象不太可能會給你一個性能瓶頸。但是,如果你必須做解析等,你可能想要堅持解析的對象。

[額外]我很好的做法(我認爲至少)是爲您的appsettings在您的global.asax.cs文件中創建靜態屬性。您可以在application_start方法中實例化這些屬性,並將它們用於整個Web應用程序。這可以防止您在代碼中使用硬編碼的字符串(配置鍵)。

1

它被緩存在內存中。磁盤上的緩存對於經常訪問的內容並沒有多大意義,並且已經可以將其轉換爲易於存儲的數據結構。我的建議是可以自由訪問它,因爲它可以像存儲它的任何方案一樣快,並且可能更快。

-1

我的建議是使用它就像任何其他變量的數據被緩存的簡單原因。如果您在global.asax中創建靜態變量,則您正在強制自己編寫更多代碼。無論您的計劃如何,在開發階段很可能會經常在appconfig中添加變量。

-1

在ASP .NET中有兩種類型的緩存。

  1. 應用程序緩存 - 內部對象緩存基於 memorylimitation,時間限制和其他依賴

  2. 頁面輸出緩存 - 呈現在服務器頁面緩存。他們兩個 都是基於內存的;不是磁盤。

5

在ASP.NET中,<的appSettings之後第一次訪問 >部分被緩存到存儲器

  • http://msdn.microsoft.com/en-us/library /aa478432.aspx
  • http://weblogs.asp.net/stevewellens/web-config-is-cached

如果web.config文件有更新,ASP.NET將重新啓動應用程序。