【问题标题】:vb.net instance of MemoryCache always returns Nothing from cacheMemoryCache 的 vb.net 实例总是从缓存中返回 Nothing
【发布时间】:2018-05-28 09:08:34
【问题描述】:

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

【问题讨论】:

  • 构造函数根本无法返回Nothing。构造函数创建一个对象,它不能创建一个对象的唯一方法是抛出一个异常。其他事情正在发生。
  • 顺便问一下,您知道您可以在配置文件中指定这些限制并让Default 实例从那里使用它们吗?
  • @jmcilhinney,是的,我刚刚找到了配置设置:) thx。仍然很好奇为什么它不起作用。刚刚在 C# 中创建了一个新的空项目,它在那里完美地工作。关于退货;我的意思是它在从缓存实例调用变量时返回 Nothing(构造函数只是在那里显示我如何初始化实例)。对不起,如果我对此有点模糊。 Config file as reference for ppl who come here

标签: .net vb.net caching memorycache


【解决方案1】:

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

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

【讨论】:

  • 是的,就是这样!非常感谢。不敢相信我自己没有注意到这一点。猜猜是因为MemoryCache.Default 工作它让我走错了路,尽管现在完全有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2012-05-02
  • 2021-08-08
相关资源
最近更新 更多