Исключение из нехватки памяти - PullRequest
0 голосов
/ 10 мая 2011

Иногда при запуске программы происходит исключение из памяти.Трассировка стека приведена ниже.Я получаю этот сбой только на клиентской машине.

Какие шаги следует выполнить, чтобы определить основную причину?

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

2 голосов
/ 10 мая 2011

используйте приличный профилировщик памяти, чтобы помочь найти основную причину проблемы

0 голосов
/ 10 мая 2011

Из приведенного выше следа я понимаю, что вы используете windows.forms. Утечка памяти в программах Windows Form может быть связана с тем, что вы забыли отписаться о событиях при закрытии формы (подписчики не могут утилизировать форму). Есть несколько статей и учебных пособий , которые предполагают, что это довольно распространенная ошибка в программировании форм, так что, возможно, вы могли бы ее проверить. Конечно, сказав это, он может не совсем соответствовать вашему случаю (например, при запуске программы).

Если в управляемом коде происходит утечка памяти, использование профилировщика памяти, вероятно, является хорошей идеей. Я в основном использовал ANTS Mem Profiler , у него хорошие графики и статистика, и в целом более удобный пользовательский интерфейс, чем у большинства.

Если, однако, утечка произошла в неуправляемом коде (как для этого парня здесь) , вас ожидает поездка. Эта статья может помочь вам начать работу.

В целом у вас впереди много чтения, пытаясь понять, как управлять памятью в приложениях .net, как работают поколения gc и т. Д., И все это может отнять у вас много времени.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...