Prevent .NET Garbage collection for short period of time(在短时间内阻止 .NET 垃圾收集)
问题描述
我有一个处理大量数据的高性能应用程序.它在很短的时间内接收、分析和丢弃大量信息.这会导致我目前正在尝试优化的大量对象流失,但它也会导致次要问题.当垃圾收集启动时,它会在清理东西时导致一些长时间的延迟(我的意思是 10 到 100 毫秒).99% 的时间这是可以接受的,但是对于大约 1-2 分钟的短暂时间窗口,我需要绝对确定垃圾收集不会导致延迟.我知道这些时间段何时会发生,我只需要一种方法来确保在此期间不会发生垃圾收集.该应用程序是使用 .NET 4.0 Framework 用 C# 编写的,如果重要的话,它会使用托管代码和非托管代码.
I have a high performance application that is handling a very large amount of data. It is receiving, analysing and discarding enormous amounts of information over very short periods of time. This causes a fair amount of object churn that I am currently trying to optimize, but it also causes a secondary problem. When Garbage Collection kicks in it can cause some long delays as it cleans things up (by long I mean 10s to 100s of milliseconds). 99% of the time this is acceptable, but for brief windows of time about 1-2 minutes long I need to be absolutely sure that Garbage Collection does not cause a delay. I know when these periods of time will occur beforehand and I just need a way to make sure that Garbage collection doesn't happen during this period. The application is written in C# using .NET 4.0 Framework and uses both managed and unmanaged code if that matters.
我的问题是;
- 是否可以暂时暂停整个程序的垃圾收集?
- 是否可以在我需要释放垃圾收集的窗口之前使用 System.GC.Collect() 强制进行垃圾收集,如果这样做,我将在多长时间内释放垃圾收集?
- 人们对最大限度地减少对垃圾收集的总体需求有何建议?
注意 - 这个系统相当复杂,包含许多不同的组件.我希望避免采用必须在程序的每个类上实现自定义 IDisposable 接口的方法.
Note - this system is fairly complex with lots of different components. I am hoping to avoid going to a approach where I have to implement a custom IDisposable interface on every class of the program.
推荐答案
.NET 4.6 增加了两个新方法:GC.TryStartNoGCRegion
和 GC.EndNoGCRegion
就是为了这个.
.NET 4.6 added two new methods: GC.TryStartNoGCRegion
and GC.EndNoGCRegion
just for this.
这篇关于在短时间内阻止 .NET 垃圾收集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在短时间内阻止 .NET 垃圾收集
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- rabbitmq 的 REST API 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01