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

Vadik(R)

Well-Known Member
12.12.2007
469
0
25
Волгоград
#1
Собственно, напала на меня мания удалять ненужные строки кода. И, извиняюсь за нубский вопрос, но для чего делать CloseKey? Просто встречал примеры программ, где при работе с реестром при записи в него какой-то информации делают CloseKey, и встречал примеры программ, где такое не делают. Так что я не пойму, для чего он нужен, и, если его не использовать, к каким ошибкам может это привести? Ещё раз сорри за нубский вопрос :)
 
S

Silver Wind

Гость
#2
Класс TRegistry это обертка над Windows API для работы с реестром (функции RegCreateKey; RegDeleteKey; RegEnumKey и т.д.).
Для идентификации ключа реестра, над которым проводятся операции в эти функции передается дескриптор (HANDLE) этого ключа. Получить дескриптор ключа по имени позволяет, например RegOpenKey() функция.

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

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

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

Vadik(R)

Well-Known Member
12.12.2007
469
0
25
Волгоград
#3
Спасибо за ЛикБез :rolleyes:
Тут мне дали немного другой ответ, но тем не менее, сути это не меняет, лучше буду закрывать :)