ОБСУЖДЕНИЕ

Для чего нужен Closekey при работе с реестром

2 ответов 6,4 тыс.
Автор темы
Собственно, напала на меня мания удалять ненужные строки кода. И, извиняюсь за нубский вопрос, но для чего делать CloseKey? Просто встречал примеры программ, где при работе с реестром при записи в него какой-то информации делают CloseKey, и встречал примеры программ, где такое не делают. Так что я не пойму, для чего он нужен, и, если его не использовать, к каким ошибкам может это привести? Ещё раз сорри за нубский вопрос :)
 
Класс TRegistry это обертка над Windows API для работы с реестром (функции RegCreateKey; RegDeleteKey; RegEnumKey и т.д.).
Для идентификации ключа реестра, над которым проводятся операции в эти функции передается дескриптор (HANDLE) этого ключа. Получить дескриптор ключа по имени позволяет, например RegOpenKey() функция.

Дескрипторы это системные ресурсы. Грубо говоря система хранит некую таблицу в памяти с информацией об открытом ключе а дескриптор это индекс записи в данной таблице. Закрывая ключ мы освобождаем системный ресурс, позволяем системе удалить эту запись.

Незакрытые дескрипторы это не освобожденные системные ресурсы, иначе говоря утечка ресурсов. Количество дескрипторов в системе ограничено (хотя и довольно велико). А значит не закрывая их мы можем столкнуться с ситуацией когда отрыть новый ключ будет невозможно - возникнет исключение о нехватке ресурсов в системе.

Дескрипторы ассоциированы с приложением, которое их открыло и при закрытии приложения все ассоциированные с ним дескрипторы будут закрыты системой автоматически. Однако НЕ закрывать дескрипторы после того как они стали больше не нужны - это значит засорять систему и не следовать рекомендациям/требованиям к используемым функциям (т.е. дурной тон и совсем не профессионально :rolleyes: ).
 
Спасибо за ЛикБез :rolleyes:
Тут мне дали немного другой ответ, но тем не менее, сути это не меняет, лучше буду закрывать :)