一尘不染

防止在短时间内收集.NET垃圾

c#

我有一个高性能的应用程序,正在处理大量数据。它正在非常短的时间内接收,分析和丢弃大量信息。这会导致大量对象流失,而我目前正在尝试优化该对象流失,但同时也会导致第二个问题。当垃圾回收启动时,它可能会导致清理过程变长(很长一段时间,我的意思是10到100毫秒)。99%的时间是可以接受的,但是对于大约1-2分钟长的短暂时间,我需要绝对确保垃圾回收不会造成延迟。我知道这些时间段何时会提前发生,我只需要一种方法来确保在此期间不会发生垃圾收集。该应用程序是使用.NET
4用C#编写的。

我的问题是;

  1. 是否可以暂时暂停整个程序的垃圾回收?
  2. 是否可以使用System.GC.Collect()强制在我需要免费垃圾收集的窗口之前进行垃圾收集,如果我将多长时间免费使用垃圾收集?
  3. 人们对减少总体垃圾收集有何建议?

注意-该系统相当复杂,具有许多不同的组件。我希望避免使用必须在程序的每个类上实现自定义IDisposable接口的方法。


阅读 178

收藏
2020-05-19

共1个答案

一尘不染

.NET 4.6添加了两个新的方法:GC.TryStartNoGCRegionGC.EndNoGCRegion只为这一点。

2020-05-19