Прочитать на английском

Поделиться через


GCNotificationStatus Перечисление

Определение

Предоставляет сведения о текущей регистрации для уведомления о следующей полной сборке мусора.

C#
public enum GCNotificationStatus
C#
[System.Serializable]
public enum GCNotificationStatus
Наследование
GCNotificationStatus
Атрибуты

Поля

Canceled 2

Текущая регистрация отменена пользователем.

Failed 1

Не удалось отправить уведомление по любой причине.

NotApplicable 4

Это значение может привести к тому, что нет текущей регистрации для уведомления о сборке мусора или произошла полная сборка мусора, но была выполнена как фоновая сборка мусора (т. е. сборка мусора, которая работает в основном параллельно с потоками пользователей) вместо полной блокировки сборки мусора. Фоновая сборка мусора включена по умолчанию; отключение повышает точность прогнозирования, но приостанавливает сборку мусора большего размера.

Succeeded 0

Уведомление успешно отправлено, и регистрация не отменена.

Timeout 3

Время, указанное в параметре millisecondsTimeout для метода WaitForFullGCApproach(Int32) или WaitForFullGCComplete(Int32), истекло.

Примеры

В следующем примере показано, как GCNotificationStatus получить перечисление WaitForFullGCApproach из метода. Если перечисление возвращается успешно, он вызывает пользовательский метод OnFullGCApproachNotify для выполнения действий в ответ на приближающуюся полную сборку мусора. Этот пример кода является частью более крупного примера, представленного в разделе "Уведомления о сборке мусора ".

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;
        }
    }
}

Комментарии

RegisterForFullGCNotification Используйте метод для регистрации для получения полного уведомления о сборке мусора. Затем используйте WaitForFullGCApproach метод или WaitForFullGCComplete метод для возврата GCNotificationStatus перечисления, содержащего состояние уведомления.

Применяется к

Продукт Версии
.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

См. также раздел