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

GC.WaitForPendingFinalizers-Methode ()

 

Hält den aktuellen Thread so lange an, bis der Thread, der die Finalizerwarteschlange verarbeitet, diese Warteschlange geleert hat.

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

public static void WaitForPendingFinalizers()

Wenn der Garbage Collector Objekte, die freigegeben werden können findet, wird jedes Objekt, um zu bestimmen, die finalisiert.Wenn ein Objekt einen Finalizer implementiert und die Finalisierung nicht, durch den Aufruf deaktiviert wurde SuppressFinalize, das Objekt befindet sich in einer Liste von Objekten, die als abgeschlossen markiert sind.Der Garbage Collector Ruft die Finalize -Methoden für die Objekte in der Liste auf und entfernt die Einträge aus der Liste.Diese Methode wird blockiert, bis alle Finalizer vollständig ausgeführt haben.

Der Thread, in dem Finalizer ausgeführt werden, ist nicht angegeben, damit es gibt keine Garantie, die diese Methode beendet.Jedoch kann dieser Thread unterbrochen werden, von einem anderen Thread während der WaitForPendingFinalizers -Methode wird gerade ausgeführt.Sie können z. B. einen anderen Thread starten, der eine bestimmte Zeit wartet und dann diesen Thread unterbricht, wenn dieser Thread noch angehalten ist.

Im folgenden Beispiel wird veranschaulicht, wie Sie die WaitForPendingFinalizers -Methode, um den aktuellen Thread anzuhalten, bis die Finalisierung aller freigegebenen Objekte abgeschlossen ist.

using System;

namespace WaitForPendingFinalizersExample
{
   class MyWaitForPendingFinalizersClass
   {
	// You can increase this number to fill up more memory.
	const int numMfos = 1000;
	// You can increase this number to cause more
	// post-finalization work to be done.
	const int maxIterations = 100;

	static void Main(string[] args)
	{
	   MyFinalizeObject mfo = null;

	   // Create and release a large number of objects
	   // that require finalization.
	   for(int j = 0; j < numMfos; j++)
	   {
	      mfo = new MyFinalizeObject();
	   }

	   //Release the last object created in the loop.
	   mfo = null;

	   //Force garbage collection.
	   GC.Collect();

	   // Wait for all finalizers to complete before continuing.
	   // Without this call to GC.WaitForPendingFinalizers, 
	   // the worker loop below might execute at the same time 
	   // as the finalizers.
	   // With this call, the worker loop executes only after
	   // all finalizers have been called.
	   GC.WaitForPendingFinalizers();

	   // Worker loop to perform post-finalization code.
	   for(int i = 0; i < maxIterations; i++)
	   {
	      Console.WriteLine("Doing some post-finalize work");
	   }
	}
   }

   class MyFinalizeObject
   {
	// Make this number very large to cause the finalizer to
	// do more work.
	private const int maxIterations = 10000;

	~MyFinalizeObject()
	{
	   Console.WriteLine("Finalizing a MyFinalizeObject");

	   // Do some work.
	   for(int i = 0; i < maxIterations; i++)
	   {
	      // This method performs no operation on i, but prevents 
	      // the JIT compiler from optimizing away the code inside 
	      // the loop.
	      GC.KeepAlive(i);
	   }
        }
    }
}

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 1.1
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: