[英]vb.net instance of MemoryCache always returns Nothing from cache
我正在嘗試創建MemoryCache類的實例,以緩存一些文檔信息。 問題是,即使我沒有任何異常,MemoryCache實例也始終返回“ Nothing”。 我正在使用以下代碼;
構造實例:
Private Shared ObjInfoCache As MemoryCache
Public Sub New()
Dim CacheSettings As NameValueCollection = New NameValueCollection(3)
CacheSettings.Add("CacheMemoryLimitMegabytes", 1024.ToString())
CacheSettings.Add("physicalMemoryLimitPercentage", 50.ToString())
CacheSettings.Add("pollingInterval", TimeSpan.FromMinutes(2).ToString())
ObjInfoCache = New MemoryCache("TestCache", CacheSettings)
End Sub
保存/檢索信息的代碼(總是跳到if語句中):
arrayOfPropValues = ObjInfoCache(docID)
If arrayOfPropValues Is Nothing Then
arrayOfPropValues = GetDocumentInfo(docID, arrayOfPropNames)
ObjInfoCache.Add(docID, arrayOfPropValues, New CacheItemPolicy() With {.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60)})
End If
通過測試,我發現使用默認的MemoryCache實例ObjInfoCache = MemoryCache.Default
可以完美地工作。 但是,它不允許我設置所需的限制屬性。 我也嘗試過創建一個新的MemoryCache實例,而不添加設置ObjInfoCache = new MemoryCache("TestCache")
,該實例仍然返回Nothing。
我正在使用.NET Framework 4
關於回報; 我的意思是從緩存實例調用變量時它什么也沒有返回
我懷疑您正在創建定義ObjInfoCache.
的類的多個實例ObjInfoCache.
您已將ObjInfoCache
聲明為Shared
,因此其引用是該類的所有實例所共有的。 但是,您正在類實例構造函數(Public Sub New())中初始化此引用。 將構造函數更改為Shared
以便在引用類型時僅執行一次。
Shared Sub New()
Dim CacheSettings As NameValueCollection = New NameValueCollection(3)
CacheSettings.Add("CacheMemoryLimitMegabytes", 1024.ToString())
CacheSettings.Add("physicalMemoryLimitPercentage", 50.ToString())
CacheSettings.Add("pollingInterval", TimeSpan.FromMinutes(2).ToString())
ObjInfoCache = New MemoryCache("TestCache", CacheSettings)
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.