【发布时间】:2011-05-27 04:32:05
【问题描述】:
我正在一个 .NET 应用程序中工作,其中我们有一个使用字典实现的非常大的缓存。我通过 TTL 和定期检查过期项目的收割机从缓存中删除内容。一个给定的通用 TTL 值将是几小时的数量级。考虑到这一点,当我将每个对象放入缓存时,我可以做些什么,这样我每次想要缓存几个小时的东西时就不必经过 Gen0 和 Gen1?
编辑:我应该更好地说明我的问题。我了解 .NET 垃圾收集的工作原理,并且我知道它擅长它的工作。我同意在理想情况下,您会希望它完全按照设计工作。但具体来说,我想知道是否有任何方法可以控制它在这种确切情况下的工作方式。
【问题讨论】:
-
为什么需要调整它?您能描述一下您在垃圾收集方面遇到的确切问题吗?
-
+1 同意。由于对象是长期的,它们会被提升,这就是 GC 的设计方式。
-
同意。我自己并不太关注垃圾收集,但这对我来说是一种尖叫的“过早优化”。
-
@0xA3 - 似乎如果您知道一个对象将是长寿的,那么您根本不希望它出现在 Gen0 或 Gen1 中。这样做意味着(在一段时间内)GC 将在不需要时检查它。 .NET 中的 GC 算法意味着一个对象通过 Gen0 和 Gen1 集合“证明”它是长寿的。就我而言,直接进入 Gen2 似乎是一个优势。
-
@Daniel - 这当然不是为时过早。我正在尝试优化存在内存问题和处理器上的高 GC 使用率的现有系统。