簡體   English   中英

為什么我應該只在應用程序生命周期的早期創建MemoryCache?

[英]Why should I only create MemoryCache early in the application lifecycle?

根據此處的 MSDN文檔:

除非需要,否則不要創建MemoryCache實例。 如果在客戶端和Web應用程序中創建緩存實例,則應在應用程序生命周期的早期創建MemoryCache實例。 您必須僅創建將在應用程序中使用的緩存實例數量,並將對緩存實例的引用存儲在可以全局訪問的變量中。 例如,在ASP.NET應用程序中,您可以將引用存儲在應用程序狀態中。 如果僅在應用程序中創建單個緩存實例,請使用默認緩存,並在需要訪問緩存時從Default屬性獲取對其的引用。

它並不能完全解釋其背后的原因,還有其他幾個有關清除MemoryCache ,但似乎尚未得出可靠的結論。 正如我所收集的,我的選擇是處置MemoryCache並創建一個新實例(根據上述文檔不建議這樣做),或使用枚舉器(由於性能問題也不建議使用此枚舉器)。 Trim()被證明是不可靠的,因此我正在研究為什么在應用程序生命周期的中間實例化MemoryCache被認為是一個壞主意。

為了深入了解我為什么感到好奇,這里MemoryCache的主要問題是我希望MemoryCache僅在一系列方法調用的范圍內起作用。 這些方法調用是在同一對象的不同實例之間進行的,它們共享通過數據庫檢索的數據,盡管這種可能性很小,但可能會在我分配給到期窗口的幾秒鍾內發生變化。 我的想法是,每當我開始一系列方法調用時,就創建一個新的MemoryCache實例,以確保我擁有最新的數據,而不會為每個這些實例頻繁訪問數據庫。 但是,MSDN建議不要創建新實例,建議將所有實例都放在全局變量中。

簡而言之,為什么建議在應用程序生命周期開始時實例化MemoryCache ?為什么要對我使用的MemoryCache進行全局引用?

因為它想要連續的內存。 您想要在內存碎片化之前執行此操作。

我不了解全球。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM