.net - 何时解决托管堆碎片问题

标签 .net caching heap-fragmentation

我正在阅读 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/

相关文章:

c# - 如何按日期对 DataGridView 列(绑定(bind)到 BindingSource)进行排序?

debugging - 托管堆碎片

ios - 我的 iPad 运行时内存去哪儿了?

c# - 如何使用 C# 在 Windows Server 2008 中写入事件日志?

.net - wcf 绑定(bind)接收超时

c# - 使用 Reflection.Emit 动态创建一个类。我被困

c - 用指针访问结构体的变量时,Cache 会带什么?

带有 Redis 缓存的 Django 1.9

kotlin - 如何在 Kotlin 协程中使用异步缓存?

c++ - 自定义内存管理器中的碎片化