среда, 9 января 2013 г.

Как "звучит" Garbage Collector?

Читая книгу Джеффри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#", я наткнулся на интересный класс.

Code:
    internal sealed class GCBeep
    {
        ~GCBeep()
        {
            Console.Beep();
            if (!AppDomain.CurrentDomain.IsFinalizingForUnload() && !Environment.HasShutdownStarted)
                new GCBeep();
        }
    }

Этот код примечателен тем, что во время вызова деструктора класс воспроизводит звуковой сигнал, и если приложение еще не завершено, создает новый экземпляр себя же. Теперь если мы просто создадим экземпляр этого класса, то каждый раз, когда будет запускаться Garbage Collector, будет воспроизводится звуковой сигнал (так как этот класс каждый раз будет "подметаться" GC).



Code:
    static void Main(string[] args)
    {

#if (DEBUG)
            new GCBeep();
#else

    }

Тем самым можно в прямом смысле слова УСЛЫШАТЬ как часто запусается GC для Вашего приложения! Никогда не думал что так часто :)

Комментариев нет:

Отправить комментарий