对象创建/销毁率很高 - 垃圾收集器太迟导致x64缓慢下降

时间:2013-09-07 13:07:47

标签: .net garbage-collection

我的应用程序需要通过高速摄像头缓冲大约300mb的图像。 有一个队列,其中处理最旧的图像并添加新图像。

由于这种循环性质,许多物体正在被创造并且许多物体被丢弃。我正在使用ConcurrentQueues来处理所有这些。

应用程序性能很好,但是一旦使用12GB系统内存,它就会降级,只有这样垃圾收集似乎才能将内存负载降低到300mb左右。

我已在其上运行ANTS内存分析器,似乎没有任何泄漏。

在这里调用垃圾收集是一种选择吗?

另外,我有重新使用字节数组来存储图像的想法,但这将是一个非常重写,如果其余部分失败,我只会遵循该路线......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

调用GC.Collect的主要缺点是你可能会烧掉比你需要的更多的CPU。你也过早地将对象推向更高代。

在您的情况下,您可以放心地进行CPU /内存权衡。

您还可以考虑限制进程可以使用的内存量。 Windows可以对作业对象施加此限制。您可以将您的进程登记到有限的作业中,Windows将拒绝CLR内存。然后CLR将收集以腾出空间。