【发布时间】:2016-11-26 23:30:11
【问题描述】:
.NET MemoryCache 是 C# 对象的缓存。一些对象可能具有复杂的结构,而另一些对象可能具有不安全的引用。 C# 是在为实现 PhysicalMemoryLimit 做一些魔术,还是只是计算每个对象的浅大小?
我怀疑是后者。尽管如此,如果我将同一个对象多次放入缓存中(例如,用于跟踪丢失的项目),是一次计算大小,还是对包含该实例的每个条目进行计算?
【问题讨论】:
-
我很确定缓存会尝试计算缓存中对象的大小。这样做是徒劳的,因为 (a) 任意对象的大小在插入缓存后可能会发生变化,并且 (b) 缓存对象的字段引用的对象可能还有其他引用,因此从缓存中删除并不一定会释放其所有内存。
-
不管做什么,都是通过这个方法实现的:referencesource.microsoft.com/#mscorlib/system/…
-
更改了问题的内容。
标签: c# asp.net caching memory garbage-collection