Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MemoryCache的vb.net实例始终不从缓存返回任何内容_.net_Vb.net_Caching_Memorycache - Fatal编程技术网

MemoryCache的vb.net实例始终不从缓存返回任何内容

MemoryCache的vb.net实例始终不从缓存返回任何内容,.net,vb.net,caching,memorycache,.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(

我正在尝试创建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=newMemoryCacheTestCache,它仍然不返回任何内容

我正在使用.NETFramework4

关于回归;我的意思是,当从缓存实例调用变量时,它没有返回任何内容

我怀疑您正在创建定义ObjInfoCache的类的多个实例

您已经将ObjInfoCache声明为共享,因此它的引用对于类的所有实例都是公共的。但是,您正在类实例构造函数Public Sub New中初始化此引用。更改要共享的构造函数,使其仅在引用类型时执行一次

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

构造函数不能返回任何内容。构造函数创建对象,它不能创建对象的唯一方法是抛出异常。还有一些事情正在发生。顺便问一下,你知道你可以在配置文件中指定这些限制,并让默认实例从那里使用它们吗?@jmcilhinney,是的,我刚刚找到了配置设置:thx。但仍然很好奇为什么它不起作用。刚刚用C创建了一个新的空项目,它在那里工作得非常完美。关于回归;我的意思是,当从缓存实例调用变量时,它没有返回任何内容。构造函数只是用来显示我如何初始化实例的。对不起,如果我对此有点含糊的话。是的,就是这样!非常感谢。真不敢相信我自己都没注意到。我猜这是因为MemoryCache.Default起作用了,它把我推到了错误的轨道上,尽管它现在完全有意义了。