среда, 9 февраля 2011 г.

Привязка к потокам объектов пользовательского интерфейса, часть 5: очистка объектов

Это перевод Thread affinity of user interface objects, part 5: Object clean-up. Автор: Реймонд Чен.

Оконный менеджер и GDI, как правилo, уничтожают все объекты, созданные процессом, когда этот процесс завершается (оконный менеджер также уничтожает окна, когда завершается их поток-владелец). Заметьте, что это - только ремни безопасности. Это не оправдание для вашей программы не освобождать ресурсы. "А, да пофиг, всё равно система за мной подчистит". Поскольку это ремни безопасности, то они не должны быть вашей основной мерой защиты.

Во-первых, оставлять после себя мусор для очистки системой - это просто лень. Т.е. ваша программа слишком ленива (или глупа), чтобы вести учёт своим собственным ресурсам, поэтому она свалила всю работу на ремни безопасности. Это всё равно что кидать грязную одежду на пол, потому что вы знаете, что ваша мама рано или поздно её подберёт.

Во-вторых, эта очистка происходит внутри менеджера окон и никакая другая активность в это время происходить не может - пока не закончится очистка. Если у вас утечка сотен или тысяч объектов, то система может показаться заблокированной на некоторое время (сама система будет полностью рабочей. Будет занят только оконный менеджер. Операции, которые не опираются на пользовательский интерфейс, вроде вычислений или сетевой активности, будут работать как обычно).

Почему оконный менеджер не оптимизирует случай "массивной очистки"? Потому что когда вы проектируете систему, вы фокусируетесь на оптимизации случая, когда люди используют вашу систему по правилам, как и задумывалось. Вы же не хотите награждать людей, которые злоупотребляют вами. Представьте, в каком свете выглядела бы система, если бы люди, которые игнорируют правила, получали бы более производительные приложения, чем люди, им следующие!

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

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

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.