我有一个处理大量数据的高性能应用程序。它在很短的时间内接收、分析和丢弃大量信息。这会导致我目前正在尝试优化的大量对象流失,但它也会导致次要问题。当垃圾收集启动时,它会在清理时造成一些长时间的延迟(我指的是 10 到 100 毫秒)。 99% 的时间这是可以接受的,但是对于大约 1-2 分钟的短暂时间窗口,我需要绝对确保垃圾收集不会导致延迟。我事先知道这些时间段何时会发生,我只需要一种方法来确保在此期间不会发生垃圾收集。该应用程序是使用 .NET 4.0 Framework 以 C# 编写的,并且在需要时同时使用托管和非托管代码。
我的问题是;
- 是否可以为整个程序短暂暂停垃圾收集?
- 是否可以使用 System.GC.Collect() 在我需要免于垃圾收集的窗口之前强制进行垃圾收集,如果我这样做,我将在多长时间内免于垃圾收集?
- 人们对最大限度地减少垃圾收集的整体需求有什么建议?
注意 - 这个系统相当复杂,有很多不同的组件。我希望避免采用必须在程序的每个类上实现自定义 IDisposable 接口(interface)的方法。
最佳答案
.NET 4.6 添加了两个新方法:GC.TryStartNoGCRegion
和 GC.EndNoGCRegion
就是为了这个。
关于c# - 短时间内防止 .NET 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005865/