【问题标题】:Hold an object in the memory for a specific time (C# WinForms application)将对象在内存中保存特定时间(C# WinForms 应用程序)
【发布时间】:2011-04-21 20:43:51
【问题描述】:

将对象在内存中保存一段有限的时间然后释放它的最佳方法是什么? 例如,我有一个Dictionary<int, string>,我只想保留 10 分钟,然后再将其丢弃。

怎么做?

谢谢。

【问题讨论】:

    标签: c# memory caching


    【解决方案1】:

    你不能处理字典,只有垃圾收集器才能处理掉它们。在计时器的 Tick 事件中将字典引用设置为 null 最终将完成工作。查看 WeakReference 类。

    【讨论】:

    • 正确,但我的意图不是“丢弃”它,而是不再将它保存在内存中。术语不正确。
    【解决方案2】:

    您可以使用对象缓存类(框架 4),根据 ms 文档是这样定义的: 公共抽象类 ObjectCache : IEnumerable>, IEnumerable

    该类属于 System.Runtime.Caching。为了使用它,您已经将它继承到一个具体的实现中。

    此对象的工作方式与 httpcache 应用程序的工作方式相同,因此您可以定义滑动过期时间和/也可以定义绝对过期时间

    【讨论】:

    • ObjectCache 缓存 = MemoryCache.Default;字符串文件内容 = 缓存 [“文件内容”] 作为字符串; if (fileContents == null) { CacheItemPolicy policy = new CacheItemPolicy();列表 文件路径 = 新列表(); filePaths.Add("c:\\cache\\example.txt"); policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths)); // 获取文件内容.fileContents = File.ReadAllText("c:\\cache\\example.txt"); cache.Set("filecontents", fileContents, policy); }
    【解决方案3】:

    从 .NET framework 4.0 及更高版本开始,您可以使用 MemoryCache - 它具有与 HttpCache 类似的功能,并且您不必包含企业库(即缓存应用程序块)。

    参考:http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache(v=vs.110).aspx

    大会:System.Runtime.Caching.dll

    命名空间:System.Runtime.Caching

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多