![](/img/trans.png)
[英]Should I create new Pens/Brushes per Paint request or keep them throughout the application lifecycle?
[英]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.