Sha*_*lle 9 .net c# memory memory-management
在Perf Mon中监控我们的应用程序时,我注意到GC的时间百分比在20-60%之间,而我们的应用程序执行长时间运行的过程(在30秒到1.5分钟之间变化).这对我来说似乎有些过分.这提出了两个重要问题.
Bra*_*ger 12
是的,这确实听起来过分了.减少GC的数量可能是减少应用程序运行时间的最佳步骤(如果这是您的目标).
GC中的"%时间"通常是通过分配然后丢弃数千或数百万个对象引起的.找出正在发生的事情的好方法是使用内存分析器工具.
Microsoft提供免费的CLR Profiler.这将显示每个分配,但会使您的应用运行速度慢10-60倍.您可能需要在较少的输入数据上运行它,以便它可以在合理的时间内完成分析.
一个伟大的商业工具是SciTech的.NET Memory Profiler.这会减少运行时间开销,并且可以免费试用.通过在进程运行时获取多个快照,您可以找出经常分配(然后销毁)的对象类型.
一旦确定了分配源,就需要检查代码并确定如何减少这些分配.虽然没有一个适合所有人的答案,但过去我遇到的一些事情包括:
| 归档时间: |
|
| 查看次数: |
8203 次 |
| 最近记录: |