我正在阅读 blog entry作者 Josh Smith,他使用缓存机制来“减少托管堆碎片”。他的缓存以稍慢的执行速度为代价减少了创建的短期对象的数量。
在像 C# 这样的托管语言中,托管堆碎片问题有多大?你怎么能诊断它是否有问题?在什么情况下您通常需要解决它?
最佳答案
When
不要太快。生命周期短的对象通常非常便宜。缓存要有利可图,就必须有(非常)多的候选者,并且他们应该活得足够长以使其成为下一代。
How can you diagnose if it's an issue?
使用分析器。我不太确定这篇文章的作者是否这样做了。
How much of a problem is managed heap fragmentation in a managed language like C#?
据我所知很少见。 .NET 有一个压缩垃圾收集器,可以防止大多数形式的碎片。大对象堆有时会出现问题。
编辑:
当你浏览文章下面的评论时你会发现有人测量过,发现缓存比每次创建新的eventargs慢很多。
结论:在开始优化之前进行衡量。这不是一个好主意/例子。
关于.net - 何时解决托管堆碎片问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600871/