Auf Englisch lesen

Freigeben über


GC.GetTotalMemory(Boolean) Methode

Definition

Ruft die Heapgröße ohne Fragmentierung ab. Wenn beispielsweise die Gesamtgröße des GC-Heaps 100 mb beträgt und die Fragmentierung, d. h. der von freien Objekten belegte Speicherplatz, 40 MB beansprucht, würde diese API 60 MB melden. Ein Parameter gibt an, ob diese Methode vor der Rückgabe eine kurze Zeit warten kann, damit das System die Garbage Collection durchführen und Objekte finalisieren kann.

public static long GetTotalMemory (bool forceFullCollection);

Parameter

forceFullCollection
Boolean

true, um anzugeben, dass diese Methode vor der Rückgabe auf die Garbage Collection warten kann, andernfalls false.

Gibt zurück

Die Heapgröße in Bytes ohne Fragmentierung.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die GetTotalMemory -Methode verwendet wird, um die Anzahl der Bytes abzurufen und anzuzeigen, die derzeit im verwalteten Arbeitsspeicher zugeordnet sind.

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

Hinweise

Wenn der forceFullCollection Parameter ist true, wartet diese Methode ein kurzes Intervall, bevor sie zurückgegeben wird, während das System Garbage sammelt und Objekte finalisiert. Die Dauer des Intervalls ist ein intern festgelegter Grenzwert, der durch die Anzahl der abgeschlossenen Garbage Collection-Zyklen und die Änderung der Menge des zwischen den Zyklen wiederhergestellten Speichers bestimmt wird. Der Garbage Collector garantiert nicht, dass der gesamte nicht zugegriffene Arbeitsspeicher gesammelt wird.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0