gpt4 book ai didi

c# - .NET 内存缓存 : How does it enforce memory limit?

转载 作者:太空狗 更新时间:2023-10-29 21:26:43 25 4
gpt4 key购买 nike

.NET MemoryCache是 C# 对象的缓存。某些对象可能具有复杂的结构,而其他对象可能具有不安全的引用。 C# 是否为实现 PhysicalMemoryLimit 做了一些魔法?还是只是计算每个对象的浅尺寸?

我怀疑是后者。尽管如此,如果我将同一个对象多次放入缓存中(例如,为了跟踪丢失的项目),大小会被计算一次,还是包含该实例的每个条目?

最佳答案

.NET MemoryCache 类似于 ASP.NET Cache类(class)。如果我们查看 ASP.NET 缓存,我们会看到一个名为 CacheItemRemovedCallback 的函数。当从缓存中删除项目时会触发此事件。

这个函数给出一个CacheItemRemovedReason与回调函数。如果我们查看原因,我们会发现一个项目可以从缓存中删除,因为系统将其删除以释放内存。因此,虽然 PhysicalMemoryLimit 给出了缓存可以在单个线程中使用的物理内存的百分比,但我认为他们将其留给系统以在达到限制时清除缓存。

如果你真的用 Add 将缓存项放入缓存中函数,它将把它添加为一个新的 CacheItem 实例。所以会被多次记账。如果您使用函数 AddOrGetExisting它将检查该项目是否已在缓存中准备就绪。如果是这样,它将使用该实例而不是新实例。那么就记一次。

希望这能帮助您朝着正确的方向前进。

关于c# - .NET 内存缓存 : How does it enforce memory limit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com