Хорошо, это старый вопрос, для некоторых он, вероятно, новый и имеет простое и интуитивно понятное решение с подробным объяснением.
«Должен ли я держаться, чтобы рисовать ресурсы, такие как ручки и кисти, дольше, чем требуется для предварительной операции по рисованию», вопрос перефразирован?Ответ - нет, вы не должны в этом контексте;но почему, что это значит?
Когда вы рисуете графический объект, вы используете ресурсы, требующие большого объема памяти, для каждого создаваемого объекта рисования, будь то перо, кисть, контур, матрица и так далее.
Да, создайте перья, создайте кисти и т. Д. Для рисования и выполните myPen.dispose (), и сразу же после этого освобождайте все ссылки на объект для удаленного объекта, устанавливая для этого дерева объектов значение null, например (myPen = null;) это позволяет сборщику мусора освободить неуправляемую память, которая хранится в этих объектах, не дожидаясь вызова объекта finalize ().Смотрите: Сборка мусора для получения дополнительной информации о том, как сборка мусора работает в C #.
Создание слишком большого количества этих объектов класса IDisposable и не освобождение этих объектов после завершения « Использование » может привести к серьезным последствиям для работы вашей программы, таким как возможные исключения стека и кучи памяти, вызывающиеповышенная загрузка ЦП за счет необходимости сортировки ненужных количеств объектов, которые могут привести к снижению производительности и даже к аварийному завершению во время выполнения, если его не проверять.См. Stack and Heap для получения дополнительной информации.
Мораль истории высвобождает ресурсы, которые вам больше не нужны;если вам необходимо сохранить ресурсы, протестируйте на стенде потенциальное влияние на производительность, когда вы «держитесь за ресурсы», надеясь избежать негативных последствий.
Практическое правило. В лучшем случае убедитесь, что все ресурсы высвобождаются при выходе из вашего "рисовать событие "рутина".Предпочтительно, когда каждый из ваших методов события рисования заканчивается так же, должны любые ресурсы, неявно созданные этим методом.Штраф, любые ссылки на объекты *, передаваемые этим методам, таким как ручки, кисти и т. Д., Будут удерживаться до тех пор, пока не будет вызван финализатор базового объекта, что дольше, чем необходимо, и может рассматриваться как утечка памяти в общих терминах определения.* Передача слишком большого количества ссылок равняется неиспользуемой памяти в течение более длительного периода, чем то, что, вероятно, ожидается или предполагается.
Примечание. Осторожно передайте ссылки на объекты, такие как ручки и кисти, в методы, и при этом реализуйте интерфейс IDisposable на уровне классавыполнить вашу картину.Ваша домашняя работа стала еще дороже, и рекомендуем проверить IDisposable интерфейс .
Счастливая картина!