内存不足异常

时间:2011-05-10 07:43:20

标签: c# .net crash

我在程序启动期间偶尔会出现内存异常。堆栈跟踪如下所示。我只是在客户机器上遇到此崩溃。

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

[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) 

2 个答案:

答案 0 :(得分:2)

使用合适的内存分析器来帮助找到问题的根本原因

答案 1 :(得分:0)

从上面的描述中我了解到你正在使用windows.forms。 Windows窗体程序中的内存泄漏可能是由于忘记在关闭表单时取消订阅事件(订阅者阻止处理表单)。有 a few articlestutorials表明这是表单编程中非常常见的错误,因此您可以查看它。当然,说到这一点,它可能不适合你的情况(程序启动时发生的故障)。

如果托管代码中发生内存泄漏,使用内存分析器可能是个好主意。我主要使用ANTS Mem Profiler,它有很好的图形和统计数据以及比大多数人更友好的用户界面。

但是,如果泄漏发生在非托管代码(like for this guy here)中,那么您就可以乘坐。 This article可能会帮助您入门。

总而言之,在尝试理解.net应用程序中的内存管理,gc代的工作方式等方面,你可能会有很多阅读,所有这些都会耗费你很多时间。

祝你好运!