堆第2代和大型物体堆爬升

时间:2014-10-05 11:17:46

标签: memory-leaks garbage-collection jetbrains-ide

我不确定我是否正在发布到正确的StackOverFlow论坛,但现在就去了。

我有一个C#桌面应用。它接收来自4个模拟摄像机的图像,并尝试检测运动,如果是,则保存它。

当我离开应用程序运行说24小时循环时,我注意到私人工作集在任务管理器中已经攀升了近500%。

现在,我知道使用任务管理器并不是一个好主意,但如果出现问题,它确实给了我一个指示。

为此,我从JetBrains购买了dotMemory profiler。

我已经使用它的工具来确定Heap Generation 2的大小增加了很多。然后在较小程度上也是大对象堆。

后者令人惊讶,因为图像大小为360x238,字节数组大小始终小于20K。

所以,我的问题是:

我应该显式调用GC.Collect(2)吗? 我应该担心我的应用程序是以某种方式对此负责吗?

1 个答案:

答案 0 :(得分:2)

Andrew,我的建议是在dotMemory中获取内存快照,而不是探索它以找到保留大部分内存的内容。 This video会帮助你。如果您不确定GC.Collect,只需点击“强制GC”按钮,它将收集您应用中的所有可用垃圾。enter image description here