Как правильно осуществлять загрузку настроек программы в Delphi
Всем привет, собственно вопрос: как правильнее/грамотнее/лучше осуществлять загрузку настроек программы? Раньше все это дело загонял в Splash форме. Но дело ограничивалось парочкой самописных процедур в OnCreate. Видел в интернете много разных способов, но, как вы знаете, хорошая коммунити в делфистов на вес золота, так что многие примеры пишут люди, которые сами не понимают правильно ли они написали метод, поэтому спрашиваю у вас.
Решил, что буду использовать INI файлы (да, я знаю как хорош XML, но иерархии настроек мне не надо, да и парсер работает медленее, а с регистром связываться не хочу).
Возможно ли загрузить их единожды и работать на протяжении всего цикла программы? Или тут по принципу прочитал - применил - закрыл? Возможно поделитесь, как это делаете вы? Не обязательно на Delphi, нужен сам алгоритм, а написать не проблема. Спасибо.
Если у Вас в INI - база данных на 1Гб, то лучше - прочитал настройку и закрыл файл.
Если INI как у всех (в несколько килобайт) - то читаете и держите в памяти только те, которые будут постоянно использоваться при работе с программой (другие переменные - убиваете, освобождая память).
При открытии окна конфигурации в программе - проверяйте соответствие информации на диске (считываете снова данные из INI) и те, что в памяти:
1. недостающие параметры (от которых освободили память ранее)- считываете снова из INI-файла.
2. при несовпадении списка параметров или их свойств, сообщаете пользователю: "Файл настроек на диске изменен. Обновить настройки данными из файла или использовать текущие?"
Тоже самое делайте при выходе из приложения и проверяйте целостность структуры данных, находящихся в INI-файле. (сообщите пользователю, если что-то не так, включив таймер на операцию по-умолчанию)
В Win32 самая главная проблема - это ресурсы. Каждое открытие файла - расход памяти и хэндла на этот файл. Поэтому все читают настройки и сразу их же закрывают. Кроме того, при случайном крэше системы такие ресурсы могут мрнопольно захватить такие ресурсы и данные в них окажутся испорчены.
данные вы можете хранить как угодно. Самый простой способ - потомка TStrings. Больше возможностей дает IniFile. Ну а более расширенные возможности - это хранение в формате, подобном dfm-файлу.
И это все методы, которые уже имеются в структуре программ Delphi и к которым не нужно приделывать колеса, чтоб получить велосипед.