簡體   English   中英

vb.net實例的MemoryCache始終不返回任何內容

[英]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.

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