Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

OutOfMemoryException-Klasse

 

Die Ausnahme, die ausgelöst wird, wenn für die weitere Ausführung eines Programms nicht genügend Arbeitsspeicher zur Verfügung steht.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.OutOfMemoryException
        System.InsufficientMemoryException

[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type OutOfMemoryException = 
    class
        inherit SystemException
    end

NameBeschreibung
System_CAPS_pubmethodOutOfMemoryException()

Initialisiert eine neue Instanz der OutOfMemoryException-Klasse.

System_CAPS_protmethodOutOfMemoryException(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der OutOfMemoryException-Klasse mit serialisierten Daten.

System_CAPS_pubmethodOutOfMemoryException(String)

Initialisiert eine neue Instanz der OutOfMemoryException-Klasse mit einer angegebenen Fehlermeldung.

System_CAPS_pubmethodOutOfMemoryException(String, Exception)

Initialisiert eine neue Instanz der OutOfMemoryException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

NameBeschreibung
System_CAPS_pubpropertyData

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen über die Ausnahme bereitstellen.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.(Geerbt von „Exception“.)

System_CAPS_pubpropertyInnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.(Geerbt von „Exception“.)

System_CAPS_pubpropertyMessage

Ruft eine Meldung ab, die die aktuelle Ausnahme beschreibt.(Geerbt von „Exception“.)

System_CAPS_pubpropertySource

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyStackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.(Geerbt von „Exception“.)

System_CAPS_pubpropertyTargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von „Object“.)

System_CAPS_pubmethodGetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die ursprüngliche Ursache für eine oder mehrere nachfolgende Ausnahmen ist.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.(Geerbt von „Exception“.)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_proteventSerializeObjectState

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt zu erstellen, das serialisierte Daten für die Ausnahme enthält.(Geerbt von „Exception“.)

Ein OutOfMemoryException Ausnahme hat zwei wichtige Gründe:

  • Sie versuchen, erweitern eine StringBuilder Objekt überschreitet die Länge von definiert seine StringBuilder.MaxCapacity Eigenschaft.

  • Die common Language Runtime kann kein genügend zusammenhängenden Arbeitsspeicher, um erfolgreich ausführen eines Vorgangs zugeordnet werden. Diese Ausnahme kann durch eine beliebige Eigenschaft Zuweisung oder ein Methodenaufruf ausgelöst werden, die eine speicherbelegung erfordert. Weitere Informationen zu die Ursache für die OutOfMemoryException Ausnahme finden Sie unter "Out of Memory" Does Not Refer to Physical Memory.

    Diese Art von OutOfMemoryException Ausnahme darstellt, nach einen schwerwiegenden Fehler. Falls gewünscht, die Ausnahme zu behandeln, sollten Sie enthalten eine catch Block, der Aufrufe der Environment.FailFast Methode, um Ihre app zu beenden und dem Systemereignisprotokoll ein Eintrag hinzugefügt, wie im folgenden Beispiel wird.

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Beispiele für die Bedingungen, unter dem die Ausnahme wird ausgelöst, und die Aktionen, die Sie ergreifen können, um es zu entfernen, umfassen Folgendes:

Aufrufen von werden die StringBuilder.Insert Methode.

Sie versuchen, erhöhen Sie die Länge des eine StringBuilder Objekt den übersteigt gemäß seiner StringBuilder.MaxCapacity Eigenschaft. Das folgende Beispiel veranschaulicht die OutOfMemoryException Ausnahme durch einen Aufruf der StringBuilder.Insert(Int32, String, Int32) Methode, wenn das Beispiel versucht, eine Zeichenfolge einfügen, die des Objekts würde Length Eigenschaft überschreitet die maximale Kapazität.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Sie können eine der folgenden Behebung des Fehlers Aktionen ausführen:

Ihre app wird als 32-Bit-Prozess ausgeführt.

32-Bit-Prozesse können maximal 2 GB Arbeitsspeicher der virtuellen Benutzermodus auf 32-Bit-Systemen und 4 GB Arbeitsspeicher der virtuellen Benutzer-Modus auf 64-Bit-Systemen zuzuordnen. Dies kann erschweren für die common Language Runtime ausreichend zusammenhängenden Arbeitsspeicher zuweisen, wenn eine große Belegung benötigt wird. Im Gegensatz dazu können die 64-Bit-Prozessen bis zu 8 TB an virtuellem Arbeitsspeicher zugewiesen werden. Um diese Ausnahme zu behandeln, kompilieren Sie Ihre app eine 64-Bit-Zielplattform neu. Informationen für bestimmte Plattformen in Visual Studio finden Sie unter Gewusst wie: Konfigurieren von Projekten für Zielplattformen.

Ihre app wird nicht verwaltete Ressourcen gelangen.

Obwohl der Garbage Collector in verwaltete Typen belegten Arbeitsspeicher freizugeben werden kann, wird nicht verwaltet nicht verwalteten Ressourcen, z. B. der Betriebssystemhandles (einschließlich des Handles für Dateien, Speicherabbilddateien, Pipes, Registrierungsschlüssel und wait-Handles) zugewiesene Arbeitsspeicher und Speicherblöcke zugeordnet werden direkt von Windows-API-Aufrufe oder durch Aufrufe von Speicherverwaltungsfunktionen wie z. B. malloc. Implementieren von Typen, die nicht verwaltete Ressourcen nutzen die IDisposable Schnittstelle.

Wenn Sie einen Typ, die nicht verwaltete Ressourcen verwendet verwenden, Sie sollten darauf achten, rufen Sie die IDisposable.Dispose Methode, wenn Sie ihn nicht mehr benötigen. (Einige Typen implementieren darüber hinaus eine Close -Methode, die in der Funktion an identisch ist eine Dispose Methode.) Weitere Informationen finden Sie im Thema Using Objects That Implement IDisposable.

Wenn Sie einen Typ, der nicht verwaltete Ressourcen verwendet erstellt haben, stellen Sie sicher, dass Sie das Dispose-Muster implementiert und, bei Bedarf einer Finalize-Methode bereitgestellten. Weitere Informationen finden Sie unter der Dispose-Muster, Implementieren einer Dispose-Methode, und Object.Finalize Themen.

Sie versuchen, ein großes Array in eine 64-Bit-Prozess zu erstellen.

Standardmäßig lässt die common Language Runtime nicht einzelne Objekte zu, deren Größe über 2 GB überschreitet. Um diese Standardeinstellung zu überschreiben, können Sie die Einstellung in der Konfigurationsdatei Arrays aktivieren, deren Gesamtgröße 2 GB überschreitet.

Sie arbeiten mit sehr großen Mengen von Daten (z. B. Arrays, Auflistungen oder Datenbank-Datasets) im Arbeitsspeicher.

Wenn Datenstrukturen oder Datasets, die im Arbeitsspeicher befinden sich so groß, dass die common Language Runtime genügend zusammenhängenden Arbeitsspeicher belegt werden, ist ein OutOfMemoryException Ausnahmeergebnisse.

Um zu verhindern, dass die OutOfMemoryException Ausnahmen, damit weniger Daten im Speicher ist, oder die Daten in Segmenten, die erfordern kleinere speicherbelegungen aufgeteilt werden, ändern Sie die Anwendung muss. Zum Beispiel:

  • Wenn Sie alle Daten aus einer Datenbank abgerufen und Filtern es in Ihrer app in der Roundtrips zum Server zu minimieren, sollten Sie Ihre Abfragen, um nur die Teilmenge der Daten zurückzugeben, die Ihre app benötigt ändern. Bei der Arbeit mit großen Tabellen mehrere Abfragen sind fast immer mehr effizient als alle Daten in einer einzelnen Tabelle abrufen und bearbeiten sie.

  • Wenn Sie Abfragen, die Benutzer dynamisch zu erstellen ausführen, sollten Sie sicherstellen, dass die Anzahl der von der Abfrage zurückgegebenen Datensätze beschränkt ist.

  • Wenn Sie mit großen Arrays oder andere Auflistung-, deren Größe Ergebnisse in Objekten eine OutOfMemoryException Ausnahme, sollten Sie die Anwendung, um die Daten in Teilmengen zu arbeiten, statt alle auf einmal bearbeiten ändern.

Im folgenden Beispiel wird ein Array, das von Gleitkommawerten 200 Millionen besteht aus und klicken Sie dann deren Mittelwert berechnet. Die Ausgabe des Beispiels zeigt, dass die da im Beispiel werden das gesamte Array im Arbeitsspeicher gespeichert, bevor sie den Mittelwert berechnet eine OutOfMemoryException wird ausgelöst.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Das folgende Beispiel schließt den OutOfMemoryException Ausnahme durch die Verarbeitung der eingehenden Daten ohne Speichern das gesamte Dataset im Arbeitsspeicher, die Daten in eine Datei zu serialisieren, ggf. um weitere Verarbeitung zu ermöglichen (diese Zeilen auskommentiert werden im Beispiel, da in diesem Fall sie eine Datei erstellen, dessen Größe größer als 1 GB ist), und den Mittelwert der berechneten und die Anzahl von Fällen an die aufrufende Routine zurückgegeben.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.
Sie werden wiederholt große Zeichenfolgen verketten.

Da Zeichenfolgen unveränderlich sind, wird jede Verkettung "String"-Vorgang eine neue Zeichenfolge erstellt. Die Auswirkungen für kurze Zeichenfolgen oder für eine kleine Anzahl von Verkettungsvorgänge, sind zu vernachlässigen. Aber für große Zeichenfolgen oder eine sehr große Anzahl von Verkettungsvorgänge Verketten von Zeichenfolgen an eine große Anzahl von speicherbelegungen und der Fragmentierung des Arbeitsspeichers, denen eine schlechte Leistung und möglicherweise OutOfMemoryException Ausnahmen.

Wenn große Zeichenfolgen verketten oder eine große Anzahl von Verkettungsvorgänge ausführen, Sie sollten verwenden die StringBuilder -Klasse statt der String Klasse. Wenn Sie die Zeichenfolge bearbeiten abgeschlossen haben, konvertieren die StringBuilder Instanz in eine Zeichenfolge durch Aufrufen der StringBuilder.ToString Methode.

Heften Sie eine große Anzahl von Objekten im Arbeitsspeicher.

Eine große Anzahl von Objekten im Arbeitsspeicher längere Zeiträume anheften kann für den Garbage Collector auf zusammenhängenden Speicherblöcke belegen erschweren. Wenn Sie eine große Anzahl von Objekten im Arbeitsspeicher, z. B. mit angeheftet haben die fixed -Anweisung in c# oder durch Aufrufen der GCHandle.Alloc(Object, GCHandleType) Methode mit einem Handle GCHandleType.Pinned, erreichen Sie Folgendes verwenden, um die Adresse der OutOfMemoryException Ausnahme.

  • Bewerten Sie, ob jedes Objekt wirklich angeheftet werden muss,

  • Stellen Sie sicher, dass jedes Objekt so bald wie möglich gelöst ist.

  • Stellen Sie sicher, dass jeder Aufruf der GCHandle.Alloc(Object, GCHandleType) Methode, um die Pin-Speicher verfügt über einen zugehörigen Aufruf an die GCHandle.Free Methode an, dass der Arbeitsspeicher zu lösen.

Die folgenden Microsoft intermediate (MSIL)-Anweisungen Auslösen einer OutOfMemoryException Ausnahme:

OutOfMemoryExceptionverwendet das HRESULT COR_E_OUTOFMEMORY, der über den Wert 0x8007000E verfügt.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von OutOfMemoryException, finden Sie unter der OutOfMemoryException Konstruktoren.

System_CAPS_noteHinweis

Der Wert des geerbten Data Eigenschaft ist immer null.

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: