1

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

由于这种循环性质,许多对象被创建并被处置。我正在使用 ConcurrentQueues 来处理所有这些。

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

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

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

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

有任何想法吗?

4

1 回答 1

2

调用 GC.Collect 的主要缺点是您可能会消耗比您需要的更多的 CPU。您还过早地将对象提升到更高的世代。

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

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

于 2013-09-07T13:37:40.723 回答