c# - System.Web.Caching.Cache Dispose 对象是否从缓存中清除?

标签 c# asp.net-mvc asp.net-mvc-3 caching thread-safety

背景:我正在编写 ASP.NET MVC 3 Web 应用程序。我有一个 List<MyObject>由于方便的自动过期功能和线程安全性,我想保留在缓存中的对象(实际上是几个列表)。

这些对象中的每一个都在内部包含 System.Threading.Semaphore 的实例用于内部服务器推送实现。

所以我想知道如果我将它们放入缓存中,将如何改变我的对象的生命周期?如果缓存实际上处理它清除的对象/等等,这可能会导致线程/NullReferenceExceptions 问题吗?也许还有其他一些不这样做的明显原因?

TIA。

最佳答案

当对象出于任何原因从缓存中弹出时,缓存不会显式处理对象。您可以通过测试来证明这一点,但如果是这种情况,它会出现在文档中,但事实并非如此:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

缓存中对象的生命周期可以通过在缓存中来延长,因为缓存持有对它们的引用。如果您想避免这种情况,您可以缓存一个弱引用。

http://msdn.microsoft.com/en-us/library/system.weakreference.aspx

如果您这样做,那么将引用存储在缓存中应该不会对生命周期产生影响。

需要考虑的一件事 - 你说你想使用缓存是因为它是线程安全的。您应该知道缓存对象本身是线程安全的,但是如果您在缓存中缓存一个非线程安全的对象,则不会使缓存的对象本身自动成为线程安全的。具体List<T>不是线程安全的,将其存储在缓存中不会改变这一点。如果要确保线程安全,请使用并发集合。

关于c# - System.Web.Caching.Cache Dispose 对象是否从缓存中清除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9431288/

相关文章:

c# - 拥有 .NET 应用程序 "remember"首选项等?

asp.net-mvc - MVC - View 中的条件

jquery - 通过 AJAX 而不是回发进行模型绑定(bind)复选框时出现 MVC 3 问题

c# - 除了一个(登录)之外,保护 Controller 所有操作的最佳方法是什么?

c# - Json.NET StringEnumConverter 并不总是有效

c# - 将列表转换为列表<string>

c# - 使用超时处理多个 CancellationToken

asp.net-mvc - 我应该为 ASP.Net MVC 项目使用什么 ORM?

asp.net-mvc - 请帮助,无法访问 POST 上的 MVC 下拉列表中的文本

asp.net-mvc-3 - 通过 NHibernate 搜索