我不确定我是否正在发布到正确的StackOverFlow论坛,但现在就去了。
我有一个C#桌面应用。它接收来自4个模拟摄像机的图像,并尝试检测运动,如果是,则保存它。
当我离开应用程序运行说24小时循环时,我注意到私人工作集在任务管理器中已经攀升了近500%。
现在,我知道使用任务管理器并不是一个好主意,但如果出现问题,它确实给了我一个指示。
为此,我从JetBrains购买了dotMemory profiler。
我已经使用它的工具来确定Heap Generation 2的大小增加了很多。然后在较小程度上也是大对象堆。
后者令人惊讶,因为图像大小为360x238,字节数组大小始终小于20K。
所以,我的问题是:
我应该显式调用GC.Collect(2)吗? 我应该担心我的应用程序是以某种方式对此负责吗?
答案 0 :(得分:2)
Andrew,我的建议是在dotMemory中获取内存快照,而不是探索它以找到保留大部分内存的内容。 This video会帮助你。如果您不确定GC.Collect,只需点击“强制GC”按钮,它将收集您应用中的所有可用垃圾。