我对MemoryCache和PhysicalMemoryLimit有疑问。
例如:
我设置了PhysicalMemoryLimit = 2
我有很多:
List<MyObject> myObject = new List<MyObject>();
myobject可以计数超过100000
我将myObject设置为使用唯一键进行缓存。
在某个时间点,缓存将已满并
“如果缓存大小超过指定的限制,则内存缓存实现将删除缓存条目。”
但是在缓存已满之前,其中一个对象在foreach中使用了很长时间。当内存缓存实现删除缓存条目时,该对象将会是什么?
抱歉我的英文。
答案 0 :(得分:1)
内存中缓存保留与指定密钥关联的缓存对象的引用,以便在需要时可以使用它,也不会被GC收集。
当缓存大小超过指定的限制时,删除缓存条目意味着缓存不再保留对该对象的引用,以便随后可以将其置于下一个垃圾回收中。但是,如果该对象正在用户的逻辑中使用,就像在foreach循环中的情况一样。它不会保留在缓存中,但会在用户代码中提供,直到被引用。