2009-04-21 16 views
2

Nach der Installation meines Programms auf einem Windows Vista Premium, erhalte ich die folgende Ausnahme.System.OutOfMemoryException: Nicht genügend Arbeitsspeicher (GDI)

Die Ansicht, die angezeigt werden muss, enthält folgende Steuerelemente: 2 Textfelder, 3 Beschriftungen, eine Schaltfläche und eine Verknüpfungstaste.

System.OutOfMemoryException: Out of memory. 
    at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc) 
    at System.Windows.Forms.PaintEventArgs.get_Graphics() 
    at System.Windows.Forms.Control.PaintException(PaintEventArgs e) 
    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) 
    at System.Windows.Forms.Control.OnPrint(PaintEventArgs e) 
    at System.Windows.Forms.Control.WmPrintClient(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.Form.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) 

Jemand hatte das gleiche Problem? Wie man es löst?

Antwort

3

Verwendet Ihre App benutzerdefinierte Steuerelemente oder Steuerelemente, die Sie selbst geschrieben haben? Können Sie dieses Problem mit einer sehr einfachen Form wiederholen? Diese

...

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/4bc34266-edf9-430c-ad5a-c6e29392eb2d

... und ...

http://social.expression.microsoft.com/Forums/zh-CN/netfxbcl/thread/7c4d2e73-6e73-4f10-a614-13fd76b2f419

... erscheint eine ähnliche Probleme. In der Regel wird jedoch über benutzerdefinierte Steuerelemente gesprochen, bei denen Objekte nicht disponiert werden können (und daher GDI-Handles verlieren).

Ist es möglich, dass Sie irgendwo anders in Ihrer App Griffe verlieren?

+0

I Telerik RadGridView in meinen anderen Formen sind mit, die angezeigt werden können. Andere als dass ich die Steuerelemente von .net – Gerbrand

1

Könnte es sein, dass Sie dies nur auf einer Vista-Box erkannt haben, weil es weniger freien Speicher als auf Ihren Windows XP-Boxen gibt? Wenn die Maschinen ungefähr die gleiche Spezifikation haben, würde ich annehmen, dass die Vista-Box weniger Speicher frei hätte und daher Probleme mit Speicherlecks schneller hervorheben würde. Die andere Möglichkeit ist, dass Sie versuchen, zu viel zu rendern, da der Aufruf-Stack angibt, dass es ein scrollbares Steuerelement gibt. Ist es möglich, dass Sie eine Menge von Dingen rendern, die eigentlich nicht sichtbar sind?

+0

Ich installiere das Programm auf Win XP Pro und Business (keine Probleme) und auf Vista ultimative auch keine Probleme. Aber vista Premium -> gibt mir diesen Fehler – Gerbrand

0

Wie oft zeigen Sie dieses Formular an? Es könnte ein Handle-Problem mit Fenstergriffen sein (oder Mangel an).

Ich habe an Projekten gearbeitet, die Dialoge mit Hunderten von Steuerelementen enthalten, und es gab Speicher-/Handle-Probleme, da die Dialoge nach der Verwendung nicht entfernt wurden.

Um dies zu umgehen, speicherten sie ursprünglich die Handles für jedes Steuerelement auf dem Formular das erste Mal das Formular angezeigt wurde und sie jedes Mal danach wiederverwendet.

Meiner Meinung nach ist es einfacher und einfacher, einfach das zu zerstören, was Sie nicht brauchen, sobald Sie fertig sind.

+0

Dieses Formular zeigt nur einmal, wenn das Programm gestartet wird, müssen sie eine Anmeldung eingeben, bevor Sie das eigentliche Programm eingeben.wir haben den Computer mit dem Problem neu gestartet und jetzt startet das Programm ohne diesen Fehler und wir können im Programm arbeiten. – Gerbrand

4

Dies ist nicht unbedingt ein OOM-Fehler. GDI hat die Angewohnheit, jedes Mal, wenn eine Ausnahme ausgelöst wird, den Speicher zu löschen.

Um Microsoft zu zitieren "GDI + gibt gern OutOfMemoryExceptions in Fällen zurück, die nichts mit Speicher zu tun haben". Ein böser wenig ‚Idiosynkrasie‘

Siehe here für Details

Verwandte Themen