C# 试图找出我的应用程序因内存不足异常而崩溃的原因

C# 试图找出我的应用程序因内存不足异常而崩溃的原因,c#,out-of-memory,jetbrains-ide,C#,Out Of Memory,Jetbrains Ide,我有一个桌面应用程序。 它的目的是连接到4个数码相机,并使用VLC绑定显示到窗体上。 它的另一个目的是识别运动并上传到我的服务器 我将FPS限制为每秒10帧。 它永远不会超过这个FPS 如果我在我的电脑上运行它,它是一个四核8gb内存,那么一切正常 如果我在朋友的电脑上运行它,它是双核4gb内存,在内存异常导致应用程序崩溃之前,它可以运行数天 它崩溃的时间是不可预测的。 我的错误处理程序到处都是偏执狂:但唯一报告的错误是随机发生的内存不足异常。我将此解释为异常的原因在其他地方 我正在使用EMGU

我有一个桌面应用程序。 它的目的是连接到4个数码相机,并使用VLC绑定显示到窗体上。 它的另一个目的是识别运动并上传到我的服务器

我将FPS限制为每秒10帧。 它永远不会超过这个FPS

如果我在我的电脑上运行它,它是一个四核8gb内存,那么一切正常

如果我在朋友的电脑上运行它,它是双核4gb内存,在内存异常导致应用程序崩溃之前,它可以运行数天

它崩溃的时间是不可预测的。 我的错误处理程序到处都是偏执狂:但唯一报告的错误是随机发生的内存不足异常。我将此解释为异常的原因在其他地方

我正在使用EMGU和C

我安装了DotMemory-JetBrain并随机拍摄了快照。没有什么是不可能的。没有内存峰值或未处理的对象

这是以下内容的屏幕截图:

现在,“绿色区域”显然占据了主导地位。但是我现在应该采取什么步骤呢

谢谢任何人

其他:


这就是它的起点。但是,代码/功能完全相同…

搜索。这里有一些JetBrains的视频,我将从dotTrace Performance中的分析结果开始。对我有用的东西是不同的——你大约每分钟拍几张快照,然后探索发生了什么变化。这将有点像字典的大小增加了,或者数组中的字节增加了很多。从那里你应该能够了解到底是哪个字典或数组增加了它的大小。请尝试在应用程序启动时进行监视。您应该在内存中看到MBs。Gen2并没有表明这些对象没有被处理——它们只是在GC中幸存下来,并且应该被你的应用程序使用。图中显示了接近崩溃的结果,您需要做的是倒回开始,观察哪些对象从Gen0升级到Gen1,然后再升级到Gen2。它可能有点像一个循环通过了太多的字节。有意义吗?我需要知道几件事,也许那时我会帮助你。你的应用程序是64位还是32位?操作系统是64位还是32位的OOM异常?在您的屏幕截图上,我看到1.5Gb的托管内存被占用。获取此内存加载级别的快照,并确保应用程序需要所有这些对象,而不是内存泄漏。请看本教程,大对象堆的加载是否总是像屏幕截图上那样低?几天后检查一下。LOH碎片可能导致OOM异常。假设你还在寻找线索,这是值得一读的:@groverboy嗨,谢谢你的链接!