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

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 20 июл 2011.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Собственно, напала на меня мания удалять ненужные строки кода. И, извиняюсь за нубский вопрос, но для чего делать CloseKey? Просто встречал примеры программ, где при работе с реестром при записи в него какой-то информации делают CloseKey, и встречал примеры программ, где такое не делают. Так что я не пойму, для чего он нужен, и, если его не использовать, к каким ошибкам может это привести? Ещё раз сорри за нубский вопрос :)
     
  2. Silver Wind

    Silver Wind Гость

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

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

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

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

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Спасибо за ЛикБез :rolleyes:
    Тут мне дали немного другой ответ, но тем не менее, сути это не меняет, лучше буду закрывать :)
     
Загрузка...

Поделиться этой страницей