system.drawing

___ qstnhdr ___ System.Drawing Out of Memory Exception ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer35731675 ___

Ich habe versucht, die Lösung "Joe White" vorgeschlagen und das war es. Es wurde eine OutOfMemoryException ausgelöst, weil die Breite und Höhe des Rechtecks ​​0 waren. In meinem Fall wurde das Fenster minimiert, als die Ausnahme auftrat.

Hier ist ein Beispiel;

%Vor%     
___ answer6506132 ___

Es ist eine ziemlich schlechte Ausnahme: Ссылка .. nicht genug Speicher um die Ausführung des Programms fortzusetzen .

Sie werden oft feststellen, wenn Sie so viel zugewiesen haben, dass "einfache" Operationen / Zuweisungen diese Nachricht werfen, wird die App bald darauf abstürzen. Wenn es eine massive Zuweisung gibt, die fehlschlägt, können Sie möglicherweise fortfahren.

Wenn die App etwas Wichtiges tut, sollten Sie versuchen, die Dinge ordnungsgemäß zu schließen.

Um Ihre Fragen explizit zu beantworten:

  1. Sie werden ausgelöst, damit die App reagieren / wiederherstellen kann: Einige Speicherzuordnungen (Objekte mit 10 GB) können in vielen Situationen fehlschlagen, möglicherweise ein Absturz mit einer Zeile ( %code% ) Entsprechung) sollte wirklich eine Ausnahme auslösen, anstatt alles abzustürzen

  2. Es sollte keinen versteckten Effekt geben, aber wenn eine Zuweisung fehlschlägt, dann vielleicht das nächste Mal, wenn Sie ein %code% oder ein anderes nützliches Objekt auf eine kleine Weise für den allgemeinen Betrieb der App reservieren wollen: Dinge könnten instabil werden . Je nach Umgebung können Sie diese Ausnahme jederzeit erhalten.

Bearbeiten: Jeder, der dies liest, sollte auch bedenken, dass GDI + diese Ausnahme anscheinend auch aus anderen Gründen auslöst.

    
___ qstntxt ___

Meine Anwendungsgrafik-Engine löst diese Ausnahmen aus. Sie werden alle von einem leeren Fangblock verzehrt. In den frühen Tagen fand ich eine, die nicht gefangen war (verbunden mit der Erweiterung des Stiftes, wie ich mich erinnere). Ich habe es mit Versuch und einem leeren Fangblock umgeben. Es scheint, dass diese Ausnahmen keinen Einfluss auf die erstellte Zeichnung haben. Ich habe etwas darüber gelesen, ohne es wirklich zu verstehen oder zu verstehen.

Also zu meinen Fragen:

  1. Warum sollten diese geworfen werden, wenn sie sicher konsumiert werden können? und
  2. Ist es sicher, sie zu ignorieren? Ich mache mir Sorgen, dass jeder einen versteckten Effekt hat. Ich habe Speicherlecks, die ich zum Beispiel nie gefunden habe.
___ tag123systemzeichnung ___ System.Drawing ist ein Namespace des .NET-Frameworks. Es bietet Zugriff auf die grundlegenden Grafikfunktionen von GDI +. ___ answer6506231 ___

Ich habe gesehen, dass System.Drawing OutOfMemoryExceptions geworfen hat, selbst wenn nicht genug Arbeitsspeicher zur Verfügung steht. Einige GDI + -Funktion gibt anscheinend nur einen dummen Fehlercode zurück.

IIRC, Sie erhalten eine OutOfMemoryException, wenn Sie versuchen, einen LinearGradientBrush zu verwenden, um ein Rechteck zu füllen, dessen Breite oder Höhe Null ist. Es kann auch andere Bedingungen geben, aber das ist die Hauptsache, in die wir geraten sind.

In diesem Fall müssen Sie nicht versuchen / fangen. Fügen Sie einfach eine %code% -Anweisung zu Ihrem Zeichnungscode hinzu und füllen Sie das Rechteck nicht, wenn die Breite oder Höhe Null ist.

Update: Nach den Kommentaren auf Diese Antwort kann auch auftreten, wenn Sie versuchen, eine beschädigte Image-Datei zu laden. Dafür hättest du keine andere Wahl als zu versuchen / fangen.

Sie sind wahrscheinlich sicher OutOfMemoryExceptions von GDI + abzufangen, aber halten Sie die try-Blöcke so klein wie möglich. Erwägen Sie, die Ausnahmen zu protokollieren, damit Sie die Protokolle analysieren und gegebenenfalls einen defensiven Code hinzufügen können. Sie möchten eine echte OutOfMemoryException nicht maskieren, aber Sie möchten auch nicht, dass ein dummer GDI + -Fehlercode Ihre App zum Absturz bringt.

    
___
2
Antworten

Caching von GDI + -Objekten in einer Winforms-Anwendung: Lohnt es sich und wie geht es richtig?

Für einige meiner Winforms-Anwendungen muss ich eine ganze Reihe von GDI + -Objekten (Pinsel, Stifte, Schriftarten usw.) erstellen und sie immer wieder verwenden. Ich habe ein Ghetto-Caching-Singleton erstellt, um das zu erreichen, was ich brauc...
14.02.2012, 23:03
1
Antwort

Auswählen eines Bereichs auf einer PictureBox.Image mit der Maus in C #

Ich wollte nur eine Auswahl auf meine picturebox.image stellen, aber das ist nur schlimmer geworden als eine kleine nervige Situation. Ich dachte über eine andere Bilderbox über die Hauptbildbox nach, aber es schien mir so faul zu sein. Ich muss...
14.06.2012, 15:14
3
Antworten

Grafikobjekt zur Bilddatei

Ich möchte mein Bild zuschneiden und skalieren. Hier ist mein Code: %Vor% Nun gehe ich davon aus, dass mein resultierendes beschnittenes / skaliertes Bild im Grafik Objekt gespeichert wird. Die Frage ist - wie speichere ich es in einer Dat...
18.07.2009, 10:04
1
Antwort

Kann ich ein Bild mit einem gegebenen Text mit Powershell "zeichnen"?

Ich habe mich gefragt, ob es möglich wäre, ein kleines, einfaches jpg, png, gif mit einem gegebenen Text in powershell zu erstellen: z. B. ein kleines Quadrat, 250px × 61px, gelber Hintergrund und schwarzer Text darauf: "Test" Kann ich das...
14.01.2010, 22:06
5
Antworten

Wie bekomme ich die Bitmap / das Bild von einem Graphics-Objekt in C #?

Ich möchte wissen, wie der Zwischenzustand des Puffers aussieht, in dem das Graphics-Objekt einige Objekte zeichnet. Wie erhalte ich die Bitmap oder das Bild, auf dem es gezeichnet wird?     
15.03.2011, 06:48
4
Antworten

Wie kann ich feststellen, ob sich zwei Polygone schneiden?

Stellen Sie sich vor, ich habe die Koordinate von 4 Punkten, die ein Polygon bilden. Diese Punkte werden mit PointF in C # dargestellt. Wenn ich 2 Polygone (mit 8 Punkten) habe, wie kann ich feststellen, ob sie sich schneiden? Rectangle-Klass...
01.09.2010, 05:45
3
Antworten

Die Bitmap-Klasse verfügt über keinen Stream?

Also, nach der Entdeckung Die Bitmap-Klasse erwartet, dass der ursprüngliche Stream für die Lebensdauer des Bildes oder der Bitmap geöffnet bleibt. Ich habe mich entschieden, herauszufinden, ob die Bitmap-Klasse den Stream tatsächlich schließt...
25.05.2011, 10:53
1
Antwort

Bild mit additivem Blending zeichnen

Die Frage wurde beantwortet. Weitere Informationen finden Sie in EDIT # 4 am Ende dieses Textes. Wir arbeiten gerade an einer Spielemachine, die ziemlich gut läuft. Ich arbeite am Animation Creator und frage mich, ob es möglich ist, ein Bil...
29.08.2012, 04:29
1
Antwort

Wie bekomme ich ein Bild von einem Rechteck?

Ich mache ein Programm, das Bilder beschneidet. Ich habe zwei PictureBoxes und einen Button namens 'crop'. Ein Bildfeld enthält ein Bild. Wenn ich ein Rechteck auswähle und auf "Zuschneiden" drücke, wird der ausgewählte Bereich im anderen Bil...
01.05.2015, 08:25
1
Antwort

Die .NET Image.Save-Methode erzeugt unter Windows 64 Bit nicht reproduzierbare Ergebnisse

Ich benutze .NET Framework (versucht 3.5 & amp; 4.0), um eine .TIFF-Datei zu laden und sie als .PNG zu speichern. Ich erwarte zwei aufeinanderfolgende Aufrufe der Save () - Methode (die dieselbe TIFF-Datei verwendet), um dieselbe PNG-Datei zu er...
14.05.2012, 15:38