MemoryCache的vb.net实例总是从缓存中返回Nothing

时间:2017-12-14 10:04:47

标签: .net vb.net caching memorycache

我正在尝试创建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

1 个答案:

答案 0 :(得分:1)

  

关于回归;我的意思是当从缓存实例中调用变量时它返回Nothing

我怀疑您正在创建定义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