C# 内存不足异常

C# 内存不足异常,c#,.net,crash,C#,.net,Crash,在程序启动期间,我偶尔会出现内存不足异常。stacktrace如下所示。我只是在客户机器上遇到了这个故障 我应该遵循哪些步骤来确定根本原因? 使用合适的内存探查器帮助从上面的跟踪中找到问题的根本原因。据我所知,您正在使用windows.forms。windows窗体程序中的Mem泄漏可能是由于在关闭窗体时忘记取消订阅事件(订阅者阻止处理窗体)。有 这表明这是表单编程中非常常见的错误,所以您可以检查一下。当然,尽管如此,它可能不太适合您的情况(在程序启动时发生的内存之外) 如果内存泄漏发生在托管代

在程序启动期间,我偶尔会出现内存不足异常。stacktrace如下所示。我只是在客户机器上遇到了这个故障

我应该遵循哪些步骤来确定根本原因?


使用合适的内存探查器帮助从上面的跟踪中找到问题的根本原因。据我所知,您正在使用windows.forms。windows窗体程序中的Mem泄漏可能是由于在关闭窗体时忘记取消订阅事件(订阅者阻止处理窗体)。有 这表明这是表单编程中非常常见的错误,所以您可以检查一下。当然,尽管如此,它可能不太适合您的情况(在程序启动时发生的内存之外)

如果内存泄漏发生在托管代码中,那么使用内存分析器可能是一个好主意。我主要使用的是,它有很好的图表和统计数据,并且总体上比大多数用户界面更友好

但是,如果泄漏发生在非托管代码中,那么您将处于危险之中。也许能帮助你开始

总之,您可能需要大量阅读来理解.net应用程序中的内存管理、gc生成如何工作等,所有这些都会占用您大量的时间


祝你好运

您是否正在制作任何
位图
对象并对其进行处理?如果是这样的话,我相信没有足够的内存供进程执行相同的操作。您是否处理了所有非托管资源?@Maanu,在另一个问题中,您提到启动时加载了30个屏幕。为什么不再次包含此信息?这几乎可以肯定是错误的原因……有趣的标题:“内存异常”:-)难道不是“内存异常”吗?@ScruffyDuck从个人经验来看,如果在使用GDI时内存不足真的引发了一个正常的内存异常,我会感到惊讶。前一段时间,我对大型图像文件做了很多工作,但我一次也没有看到抛出OOM,即使是在试图为单个图像获取1GB内存时。GDI的错误报告充其量只是一个喜剧。
[369][4/29/2011 18:32:15:343]-ERR -[ThreadId = 7916, UIFramework_ICEVisionPro_GUIExceptionHandler.LogException]-System.OutOfMemoryException: Out of memory.

   at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc)

   at System.Drawing.BufferedGraphicsContext.CreateBuffer(IntPtr src, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height)

   at System.Drawing.BufferedGraphicsContext.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)

   at System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)

   at System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)

   at System.Windows.Forms.Control.WmPaint(Message& m)

   at System.Windows.Forms.Control.WndProc(Message& m)

   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

   at System.Windows.Forms.ContainerControl.WndProc(Message& m)

   at System.Windows.Forms.UserControl.WndProc(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)