Heim > Artikel > Backend-Entwicklung > C# OutOfMemoryException
OutOfMemoryException in C# ist eine Ausnahme, die von der .NET Framework-Ausführungs-Engine ausgelöst wird, wenn das Programm nicht über genügend Speicher verfügt, um seine Ausführung fortzusetzen. Wie der Name schon sagt, tritt diese Ausnahme in unserem Programm auf, wenn die CLR, d. h. Common Language Runtime, nicht in der Lage ist, genügend Speicher zuzuweisen, der zum Ausführen bestimmter Vorgänge unseres Programms erforderlich ist.
Diese Ausnahme bedeutet nicht immer, dass wir nicht genügend Speicherplatz im Speicher haben, aber manchmal bedeutet sie, dass wir nicht genügend zusammenhängenden Speicher haben, den unser Programm für die Zuweisung benötigt.
Syntax
Die Syntax zum Abfangen einer OutOfMemoryException in C# lautet wie folgt:
try { //user code which can throw OutOfMemoryException } catch(OutOfMemoryException <em>exception</em>) { //statements to handle the exception }
Die Syntax zum Auslösen einer OutOfMemoryException in C# lautet wie folgt:
throw new OutOfMemoryException();
In der obigen Anweisung ist „throw“ das Schlüsselwort, das zum Auslösen von Ausnahmen in C# verwendet wird.
In C# erhalten wir eine OutOfMemoryException, wenn unser Programm nicht über genügend Speicherplatz verfügt, um seine Ausführung fortzusetzen. Es kann viele Gründe für diese Ausnahme geben. Diese Ausnahme tritt auch auf, wenn wir insgesamt über genügend Speicherplatz für die Ausführung unseres Programms verfügen, dieser Speicherplatz jedoch nicht für die von unserem Programm erforderlichen Zuweisungen aneinander angrenzt. Die beiden Hauptgründe für diese Ausnahme sind folgende:
Es wird versucht, die Länge eines StringBuilder-Objekts über die durch die MaxCapacity-Eigenschaft von StringBuilder angegebene Länge hinaus zu erhöhen.
Wir erhalten die Ausnahme „Nicht genügend Speicher, um die Ausführung des Programms fortzusetzen.“
Zu den anderen Gründen, die diese Ausnahme verursachen können, gehören:
Hier sind die folgenden Beispiele aufgeführt
Beispiel zeigt die vom Programm ausgelöste OutOfMemoryException, wenn wir versuchen, das StringBuilder-Objekt über seine maximale Kapazität hinaus zu erweitern.
Code:
using System; using System.Text; public class Program { public static void Main() { StringBuilder stringBuilder = new StringBuilder(17, 17); stringBuilder.Append("Welcome to the "); try { stringBuilder.Insert(0, "world of C# programming", 1); Console.WriteLine(stringBuilder.ToString()); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception.Message); Console.ReadLine(); } } }
Ausgabe:
Beispiel zeigt ein Programm, das beim Versuch, das Element zur Liste hinzuzufügen, auf eine OutOfMemoryException stößt, wobei die Anzahl der hinzuzufügenden Elemente größer ist als die Kapazität der Liste.
Code:
using System; using System.Text; using System.Collections.Generic; namespace ConsoleApp4 { public class Program { public static void Main() { try { string[] strArray = GetArray(); Console.WriteLine(strArray); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } } public static string[] GetArray() { List<string> strList = new List<string>(); for (int i = 0; i <= int.MaxValue; i++) { strList.Add("Hello"); } return strList.ToArray(); } } }
Ausgabe:
Wir können OutOfMemoryException in C# vermeiden, indem wir die folgenden Punkte beachten:
Wenn die 64-Bit-Plattform nicht in der Liste verfügbar ist, dann:
Die OutOfMemoryException ist eine Laufzeitausnahme, die dem Programmierer mitteilt, dass nicht genügend Speicher oder ein Mangel an zusammenhängendem Speicher für die vom C#-Programm benötigten Zuweisungen vorhanden ist.
Um diese Ausnahme zu vermeiden, sollte der Benutzer immer die erforderlichen Vorsichtsmaßnahmen treffen und diese Ausnahme behandeln.
Das obige ist der detaillierte Inhalt vonC# OutOfMemoryException. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!