vb.net MemoryCache 实例总是 returns 缓存中没有任何内容
vb.net instance of MemoryCache always returns Nothing from cache
我正在尝试创建 MemoryCache class 的实例以缓存一些文档信息。问题是即使我没有得到任何异常,MemoryCache 实例总是 returns '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
saves/retrieves 信息(总是跳转到 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")
,它仍然 returns 没有。
我正在使用 .NET Framework 4
About the return; I meant it returned Nothing when calling a variable from the cache instance
我怀疑您正在创建定义 ObjInfoCache.
的 class 的多个实例
您已将 ObjInfoCache
声明为 Shared
,因此它的引用对于 class 的所有实例都是通用的。但是,您正在 class 实例构造函数 (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
我正在尝试创建 MemoryCache class 的实例以缓存一些文档信息。问题是即使我没有得到任何异常,MemoryCache 实例总是 returns '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
saves/retrieves 信息(总是跳转到 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")
,它仍然 returns 没有。
我正在使用 .NET Framework 4
About the return; I meant it returned Nothing when calling a variable from the cache instance
我怀疑您正在创建定义 ObjInfoCache.
您已将 ObjInfoCache
声明为 Shared
,因此它的引用对于 class 的所有实例都是通用的。但是,您正在 class 实例构造函数 (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