相关疑难解决方法(0)

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

我有一个处理大量数据的高性能应用程序.它在很短的时间内接收,分析和丢弃大量信息.这导致我正在尝试优化的大量对象流失,但它也会导致次要问题.当垃圾收集进入时它可能会导致一些长时间的延迟,因为它清理了一些东西(长的意思是10到100毫秒).99%的时间这是可以接受的,但对于大约1-2分钟的短暂时间窗口,我需要绝对确定垃圾收集不会导致延迟.我知道这些时间段何时会事先发生,我只需要一种方法来确保在此期间不会发生垃圾收集.该应用程序使用.NET 4.0 Framework以C#编写,如果重要,则使用托管代码和非托管代码.

我的问题是;

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

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

c# performance garbage-collection

63
推荐指数
2
解决办法
3万
查看次数

如何避免实时.NET应用程序中的垃圾收集?

我正在编写一个金融C#应用程序,它接收来自网络的消息,根据消息类型将它们转换为不同的对象,最后将应用程序业务逻辑应用于它们.

关键是在应用业务逻辑之后,我非常确定我将永远不再需要这个实例.我不想等待垃圾收集器释放它们,而是明确地"删除"它们.

有没有更好的方法在C#中这样做,我应该使用一个对象池来重用总是相同的实例集,还是有更好的策略.

目标是避免垃圾收集在时间关键过程中使用任何CPU.

.net c# garbage-collection finance real-time

11
推荐指数
6
解决办法
2万
查看次数

CLR内存消耗问题

CLR的一个问题是在缺少RAM时出现非常糟糕的行为(当托管进程的某些内存被调出时,这会导致整个系统完全冻结,甚至无法访问Ctrl-Alt-Del屏幕我假设原因是GC尝试构建可到达对象的图形并尝试扫描进程的所有内存,从而导致大量页面/页面输出操作).
这对我的.NET程序来说是一个问题,因为当输入数据很大时它会消耗大量的RAM.

我宁愿向用户显示"内存不足"的消息,而不是完全挂起他的系统^ _ ^
有没有办法实现这一点?

.net clr performance

5
推荐指数
1
解决办法
1555
查看次数

标签 统计

.net ×2

c# ×2

garbage-collection ×2

performance ×2

clr ×1

finance ×1

real-time ×1