如何最小化GC收集的长度

本文关键字:最小化 GC | 更新日期: 2023-09-27 18:01:42

我需要一个平稳运行的应用程序。我有很多连续的计算块,我需要在短时间内连续执行,所以我不介意GC做它的工作,我甚至可以进行更频繁的收集,但我需要最小化每个GC收集的长度。

我希望(如果可能的话)每次由于GC导致的线程活动暂停最多为1毫秒。

在。net中实现这一点的最佳方式是什么(我知道。net不是满足这种需求的技术,但如果它在优化后能够满足我的需求,节省开发时间和未来规范的灵活性是尝试它的良好动机)?

如何最小化GC收集的长度

MSDN页面右侧:https://msdn.microsoft.com/en-us/library/ms973837.aspx

.NET垃圾收集器提供高速分配服务可以很好地使用内存并且没有长期的碎片问题,然而,有可能做的事情会给你远远少于最佳性能。为了充分利用分配器,您应该考虑以下做法:
  • 同时分配所有(或尽可能多的)内存用于给定的数据结构。删除临时分配

  • 尽量减少对象指针的写入次数,特别是那些对旧对象的写入。

  • 减少数据结构中指针的密度

  • 限制终结器的使用,并且尽可能只在"叶子"对象上使用终结器。

  • 检查关键数据结构并使用分配分析器等工具执行内存使用配置文件的常规实践将会有很长的路要走,以保持您的内存使用有效和有

正如罗恩在他的评论中提到的。如果你想要对GC有更多的控制,你必须在。net中更加聪明。