memory-leaks - 第 2 代堆和大对象堆爬升

标签 memory-leaks garbage-collection jetbrains-ide

我不确定我是否在正确的 StackOverFlow 论坛上发帖,但这里是。

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

当我让应用程序运行超过 24 小时周期时,我注意到任务管理器中的专用工作集几乎攀升了 500%。

现在,我知道使用任务管理器不是一个好主意,但它确实会告诉我是否出现问题。

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

我使用其工具确定堆第 2 代的大小增加了很多。然后在较小程度上还有大对象堆。

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

所以,我的问题是:

例如,我应该显式调用 GC.Collect(2) 吗? 我应该担心我的应用程序在某种程度上对此负有责任吗?

最佳答案

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

关于memory-leaks - 第 2 代堆和大对象堆爬升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202103/

相关文章:

java - 如果出现 FileNotFoundException,是否应该关闭输出流?还有 IOException?

ios - Objective C中的内存泄漏问题

java - IntelliJ插件开发: how to make class extend another class

c# - JetBrains Rider "Reformat code"操作 (Ctrl+Alt+L) 删除文件末尾的换行符

c - cygwin 上的内存泄漏工具

c# - 无法使用 ANTS 内存分析器检测内存泄漏

Android Activity 方向改变,每次新实例

asp-classic - VBScript 似乎是以错误的顺序从嵌套作用域中 GC 的对象

java - 线程转储被阻止并锁定

swift - 使用 Jetbrains AppCode 时出现 Cocoapods 错误