Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


GCNotificationStatus Wyliczenie

Definicja

Zawiera informacje o bieżącej rejestracji w celu powiadomienia o następnym pełnym odśmieceniu pamięci.

C#
public enum GCNotificationStatus
C#
[System.Serializable]
public enum GCNotificationStatus
Dziedziczenie
GCNotificationStatus
Atrybuty

Pola

Nazwa Wartość Opis
Canceled 2

Bieżąca rejestracja została anulowana przez użytkownika.

Failed 1

Powiadomienie nie powiodło się z jakiegokolwiek powodu.

NotApplicable 4

Ta wartość może spowodować, że nie ma bieżącej rejestracji dla powiadomienia odzyskiwania pamięci lub wystąpiła pełna GC, ale została wykonana jako GC w tle (tj. GC, która działa głównie współbieżnie z wątkami użytkownika) zamiast pełnej blokady GC. Funkcja GC w tle jest domyślnie włączona; wyłączenie zwiększa dokładność przewidywania, ale powoduje większe wstrzymanie odzyskiwania pamięci.

Succeeded 0

Powiadomienie zakończyło się pomyślnie i rejestracja nie została anulowana.

Timeout 3

Czas określony przez millisecondsTimeout parametr WaitForFullGCApproach(Int32) lub WaitForFullGCComplete(Int32) upłynął.

Przykłady

Poniższy przykład uzyskuje GCNotificationStatus wyliczenie z WaitForFullGCApproach metody . Jeśli wyliczenie zwróci wartość Powodzenie, wywołuje metodę OnFullGCApproachNotify niestandardową, aby wykonać akcje w odpowiedzi na zbliżające się pełne odzyskiwanie pamięci. Ten przykład kodu jest częścią większego przykładu dotyczącego tematu Powiadomienia odzyskiwania pamięci .

C#
public static void WaitForFullGCProc()
{
    while (true)
    {
        // CheckForNotify is set to true and false in Main.
        while (checkForNotify)
        {
            // Check for a notification of an approaching collection.
            GCNotificationStatus s = GC.WaitForFullGCApproach();
            if (s == GCNotificationStatus.Succeeded)
            {
                Console.WriteLine("GC Notification raised.");
                OnFullGCApproachNotify();
            }
            else if (s == GCNotificationStatus.Canceled)
            {
                Console.WriteLine("GC Notification cancelled.");
                break;
            }
            else
            {
                // This can occur if a timeout period
                // is specified for WaitForFullGCApproach(Timeout)
                // or WaitForFullGCComplete(Timeout)
                // and the time out period has elapsed.
                Console.WriteLine("GC Notification not applicable.");
                break;
            }

            // Check for a notification of a completed collection.
            GCNotificationStatus status = GC.WaitForFullGCComplete();
            if (status == GCNotificationStatus.Succeeded)
            {
                Console.WriteLine("GC Notification raised.");
                OnFullGCCompleteEndNotify();
            }
            else if (status == GCNotificationStatus.Canceled)
            {
                Console.WriteLine("GC Notification cancelled.");
                break;
            }
            else
            {
                // Could be a time out.
                Console.WriteLine("GC Notification not applicable.");
                break;
            }
        }

        Thread.Sleep(500);
        // FinalExit is set to true right before
        // the main thread cancelled notification.
        if (finalExit)
        {
            break;
        }
    }
}

Uwagi

RegisterForFullGCNotification Użyj metody , aby zarejestrować się w celu uzyskania pełnego powiadomienia o odśmieceniu pamięci. Następnie użyj WaitForFullGCApproach metody lub WaitForFullGCComplete metody , aby zwrócić GCNotificationStatus wyliczenie zawierające stan powiadomienia.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 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
.NET Standard 2.0, 2.1

Zobacz też