Исключение нехватки памяти в System.Drawing.Graphics.FromHdcInternal, но нет утечки памяти

Я получаю очень случайный сбой со следующей трассировкой:

System.OutOfMemoryException: Out of memory.
   at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc)
   at System.Windows.Forms.PaintEventArgs.get_Graphics()
   at System.Windows.Forms.Control.PaintBackColor(PaintEventArgs e, Rectangle rectangle, Color backColor)
   at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle, Color backColor, Point scrollOffset)
   at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle)
   at System.Windows.Forms.Control.OnPaintBackground(PaintEventArgs pevent)
   at System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   at System.Windows.Forms.Control.WmEraseBkgnd(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)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Как вы можете видеть, нет ни одного моего кода в след, поэтому мне очень трудно найти причину. Поиск в Google кажется неубедительным, но обычно указывает на утечку дескриптора сборщика мусора, но после последнего сбоя мое использование памяти было:

Handle count:16,283, 
Private Bytes:995,440K, 
Virtual Bytes:1,628,208K, 
Working Set:866,892K, 
GC Heap Size:158,841K, 
GDI Objects:402, 
User Objects:1,607 

Что не кажется необычным. Также регулярно пользуюсь. каким должен быть следующий курс действий? У меня установлен Process Explorer, и мне удалось получить полный дамп памяти после одного из сбоев, но на самом деле у меня нет опыта в использовании того и другого для диагностики такого рода проблемы (до сих пор было достаточно профилировщика памяти .net)

5
задан John Saunders 26 November 2011 в 02:33
поделиться