【问题标题】:Asp.Net Caching and memory leaks when removing items from Cache从缓存中删除项目时的 Asp.Net 缓存和内存泄漏
【发布时间】:2009-05-28 05:38:09
【问题描述】:

所以我试图在我的 Asp.Net 应用程序中引入一些缓存。用户的新数据以大型数据集的形式从数据库返回。每当用户请求数据时,我都会将此数据集插入HttpRunTime.Cache。目前我将他们的缓存时间设置为 2-3 小时。这些都是非常大的数据集,我经常用不同的键将它们放入缓存中。我担心的是这样做的内存泄漏影响。 Asp.Net 会处理缓存中的过多数据并将其删除吗?此外,当 Asp.Net 或我使用 Cache.Remove() 删除缓存项时,是否仅删除了对数据集的引用,或者数据集也是从内存中收集的垃圾?是否存在数据集可能从缓存中“删除”但仍存在于内存中从而产生性能问题的情况?如果是这种情况,有没有办法明确地“垃圾收集”它们?

【问题讨论】:

    标签: asp.net caching .net-2.0 memory-leaks asp.net-2.0


    【解决方案1】:

    不保证放入缓存中的项目存在,如果内存不足,框架会清除缓存。您可以指定优先级以指示应首先自动清除哪些项目。

    关于内存是否会被释放,只要项目被管理,并且你没有在应用程序的其他地方保留引用,垃圾收集器将在缓存超时到期后释放内存(或者你手动删除它来自缓存)。

    当然,从缓存中删除并不能保证物理内存会被释放,因为这只会在垃圾收集器下次运行时发生。

    【讨论】:

    • 那么有没有办法在它让我失望之前偶尔显式释放内存?
    • 如果内存不足并且缓存中有项目,则不需要这样做,项目将自动删除,此时由于内存不足,垃圾收集器将启动。 >
    • 好的。所以 .Net 框架保证缓存永远不会产生内存问题。
    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 2023-03-18
    • 2010-10-16
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多