System.Web.Machine.Cache是否处理从缓存中清除的对象

本文关键字:缓存 清除 对象 处理 Web Machine Cache 是否 System | 更新日期: 2023-09-27 18:25:53

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

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

所以我想知道,如果我将对象放入缓存,将如何改变它们的生命周期?如果缓存实际处理了它清除的对象,这可能会在线程处理/NullReferenceExceptions等方面造成问题吗。?也许还有其他明显的理由不这么做?

TIA。

System.Web.Machine.Cache是否处理从缓存中清除的对象

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

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

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

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

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

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