fer*_*olo 6 c# memory asp.net caching garbage-collection
.NET MemoryCache是C#对象的缓存.某些对象可能具有复杂的结构,而其他对象可能具有不安全的引用.C#是否为实现PhysicalMemoryLimit做了一些魔术,还是只计算每个对象的浅层大小?
我怀疑后者是这样的.但是,如果我在缓存中多次放置相同的对象(例如,用于跟踪缺失的项目),那么大小是一次性的,还是包含该实例的每个条目?
.NET MemoryCache类似于ASP.NET Cache类.如果我们查看ASP.NET Cache,我们会看到一个名为CacheItemRemovedCallback的函数.从Cache中删除Item时会触发此操作.
此函数为CacheItemRemovedReason提供回调函数.如果我们查看原因,我们会看到一个项目可以从缓存中删除,因为系统将其删除以释放内存.因此,虽然PhysicalMemoryLimit给出了缓存可以在单个步骤中使用的物理内存的百分比,但我认为它们会将其留给系统以在缓存达到限制时清除缓存.
如果您确实使用Add函数将Cache项放入缓存中,则会将其添加为新的CacheItem实例.所以会被多次考虑.如果您使用AddOrGetExisting函数,它将检查该项是否已在缓存中.如果是这样,它将使用该实例而不是新实例.那么它将被记录一次.
希望这可以帮助您朝着正确的方向前进.