Очень редко превышать ограничение в 10000 объектов только для объектов GDI, сборщик мусора позаботится о них, когда вы сами не вызовете их метод Dispose (). Гораздо более вероятный режим отказа превышает предел объекта для окон. Это очень легко сделать в Winforms, Controls.Clear () или Controls.Remove () быстро доставит вас туда, если вы явно не удалите удаленные элементы управления. Сборщик мусора не может их убрать.
Хорошую диагностику можно получить из Taskmgr.exe, вкладка Процессы. Просмотр + Выбор столбцов и отметьте маркеры, объекты пользователя и объекты GDI. Соблюдайте эти цифры для вашего процесса, пока вы его используете. Неуклонное увеличение числа одного из них является верным признаком того, что Windows заставит вашу программу бомбить, когда она откажется от вас. Квота по умолчанию составляет 10000 для каждого. Объект USER - это объект, указывающий на наличие проблемы с Controls.Clear / Remove. Объект GDI - это объект, который указывает на утечку объектов System.Drawing. Perfmon.exe - хороший инструмент, позволяющий проверить, достаточно ли часто запускается сборщик мусора для освобождения неразмещенных объектов System.Drawing.
С общей мудростью, что вызов Dispose () явно, где требуется, является хорошей практикой. Особенно для объектов Image и Bitmap, они занимают очень мало памяти GC, но много неуправляемой памяти, довольно легко бомбить программу с помощью OOM, когда вы не располагаете ими. Остерегайтесь неприятной ловушки в Properties.Resources, вы получаете новый объект каждый раз, когда используете его, и его нужно утилизировать. Всегда используйте оператор using
в коде рисования.