我正在尝试创建MemoryCache类的实例,以缓存一些文档信息。问题是,即使我没有任何例外,MemoryCache实例总是返回"无"。我正在使用以下代码;
构建实例:
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")
,该实例仍然没有返回。
我正在使用.NET框架4
关于返回;我的意思是在调用CACHE实例
的变量时什么都没有返回
我怀疑您正在创建定义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