2013-10-04 16 views
1

我有一個Asp.Net MVC Web應用程序,其中包含大約40個值的xml配置文件。只讀一次xml文件並傳遞值,或者在需要的地方多次讀取xml會更好嗎?

我的網絡應用程序只是一個頁面,但它分成幾個部分視圖(每個都有自己的模型和控制器)。每個部分都需要使用配置文件中的一些值,但不是全部,但有一些重疊。例如,ViewA需要valueX,而ViewB需要valueXvalueY

我的問題是這樣的 - 在主HomeController中讀取一次.xml文件是否更好,並將值傳遞給所有其他視圖/控制器?我不知道我會如何做到這一點。我無法將這些值放入模型中,因爲每個部分都有自己的模型,我不認爲我想使用ViewBag存儲40個值。

或者讓每個Controller自己讀取xml文件並只獲取它所需的數據會更好嗎?這會導致同一個xml文件被讀取多達5次,只是爲了加載一個屏幕,然後每次更新部分視圖。

這兩個選項是否會影響性能或內存?

回答

3

這兩個選項是否會影響性能或內存?

是的。多次讀取文件比讀取一次要慢很多。並且堅持這些值會消耗更多的內存,而不是將它們放在它們上面。

但是我們並不是在談論很多時間或者很多內存,而不是僅僅用40個值。除非這些值是每個兆字節。

加載XML數據並緩存它有很多方法。您可以加載一次 - 第一次訪問應用程序。或者您可以爲每個請求加載它。在我的應用程序中,我在第一次訪問應用程序時加載數據。它被加載到基本上是名稱/值集合的對象中。我將接口引用傳遞給每個需要它的控制器。但後來我使用了StructureMap,這使得這種事情變得非常簡單。

不知道更多關於應用程序的結構,很難說哪個更適合。您可以使用模型調用的延遲加載單例對象來獲取數據。單例對象本身會在第一次使用時加載數據。檢查Jon Skeet的Implementing the Singleton Pattern in C#

雖然也許你不必要地擔心。如果文件很小,則很可能第一次讀取將從磁盤獲取數據到緩存中,然後從緩存中滿足讀取文件的調用。對於每次調用,您仍然需要分析XML的成本,但讀取該文件很便宜,因爲它已經在內存中。如果現在對您的工作速度足夠快,並且您不希望請求數量發生巨大變化,那麼您的努力可能會更好地用於其他優化。

2

我目前的解決方案是使用全局資源文件(.resx),而不是使用xml文件,我可以從任何地方直接訪問這些值。但是,如果有一個很好的方法來用xml來做到這一點,我仍然有興趣聽到它。