Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.06.2003, 21:16
|
|||
|---|---|---|---|
|
|||
Что лучше Реестр или ini-файлы |
|||
|
#18+
Есть приложение на Delphi. В нем около 200 форм. Каждая форма сохраняет свои настройки в ini-файл. Соответсвенно приложение плодит во время работы где-то столько же файлов. Дисковые операции правда не очень нагружают, но все равно не дает спать мысль об оптимизации. С давних лет помню, Microsoft с выходом Win32 (год где-то в 1995), окрестила технологию ini-файлов пережитком трипервой винды, и оставила ее всего лишь для сохранения совместимости, а системный реестр был рекомендован как продвинутая технология, с моторчиком БД. Ну соответсвенно при написании нового приложения решил, переделать сохранение настроек - все в реестр. Решил почитать что пишут в прессе. Марко Кэнту в своем творении "Delphi 6 для профессионалов" пишет: "Идея централизованного места хранения конфигурациоонных параметров для всех приложений оказалась архитектурной ошибкой. Даже MS признает это, указывая в требованиях совместимости с Win 2000, рекомендует использовать старые добрые ini-файлы, а реестр не засорять конфигурационными параметрами программ". Вопрос: Что же лучше 200 файлов на 200К, один файл на 200К, или 200К в реестре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 00:56
|
|||
|---|---|---|---|
|
|||
Что лучше Реестр или ini-файлы |
|||
|
#18+
Не знаю кому как лучше (или как правильно). Но я бы выбрал однозначно не 200 файлов, а один если так вопрос ставить. В одном файле сделал бы разделы по именам форм, а внутри них параметры. Что касается реестра, то его переносить с машины на машину менее удобно. Так же вероятность его порчи чуть выше вероятности порчи ini файла, меньше проблем при перестановке OS и др. Как альтернативный вариант попробуй посмотреть в сторону dbf. Мы у себя параметры для динамических форм в больших проектах держим в обычном dbf-е, вполне удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 08:42
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
Мы одно время настройки пользователя держали даже на SQL-сервере. В результате получалось, что не было привязки к конкретной машине, т.е. юзер мог сесть за любую машину и работать со своими настройками... Если выбирать между реестром или ini-файлом, то лучше один ini-файл с разделами, как говорит Алексей_S. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2003, 16:09
|
|||
|---|---|---|---|
|
|||
Что лучше Реестр или ini-файлы |
|||
|
#18+
Лучше один ini файл с разделами. Ещё лучше, если он хранится в том же каталоге, где и .exe файл программы, а не в системном каталоге. В этом случае можно иметь несколько копий программы с разными натсройками в разных каталогах на одной машине. В своё время я себе сделал вот такой класс TFileCfg = class protected CfgFile:TIniFile; function GetFileName:string; virtual; public FileName:string; StartPath:string; constructor Create(Path:string); procedure LoadData; procedure SaveData; procedure LoadCfg; virtual; abstract; procedure SaveCfg; virtual; abstract; procedure LoadFromFile(const FileName:string); procedure SaveToFile(const FileName:string); end; constructor TFileCfg.Create(Path:string); begin Inherited Create; StartPath:=ExtractFilePath(Application.ExeName); if StartPath='' then GetDir(0,StartPath); if copy(StartPath,Length(StartPath),1)<>'\' then StartPath:=StartPath+'\'; if Path='' then Path:=StartPath; if copy(Path,Length(Path),1)<>'\' then Path:=Path+'\'; FileName:=Path+GetFileName; LoadData; end; function TFileCfg.GetFileName:string; begin Result:=ChangeFileExt(ExtractFileName(Application.ExeName),'.ini'); end; procedure TFileCfg.LoadData; begin CfgFile:=TIniFile.Create(FileName); try LoadCfg; finally CfgFile.Free; end; end; procedure TFileCfg.SaveData; begin CfgFile:=TIniFile.Create(FileName); try SaveCfg; finally CfgFile.Free; end; end; procedure TFileCfg.LoadFromFile(const FileName:string); begin Self.FileName:=FileName; LoadData; end; procedure TFileCfg.SaveToFile(const FileName:string); begin Self.FileName:=FileName; SaveData; end; в программах потом создаётся класс-наследник, в котором прописываются необходимые поля-параметры и перекрываются две процедуры LoadCfg и SaveCfg В обработчике события OnCreate главной формы создаёте экземпляр этого класса. Если передать в Create пустую строку Path, то, как видно из текста процедуры, он возмёт путь от Exe файла. Если не перекрывать функцию GetFileName, то имя ini файла будет точно такое же, как и у exe файла. В программе, когда нужно сохранить параметры, просто вызываете SaveData (но не SaveCfg!!!). Небольшой пример использования TCourierConfig = class (TFileCfg) public ServerName:string; BaseName:string; UserName:string; Password:string; AutoLogin:boolean; FullConnectString:boolean; ConnectString:string; PacketSize:integer; DocStartDate:TDateTime; CodePeriod:integer; fFullScreen:boolean; OrderTemp:string; OtvodTemp:string; PathListText:string; procedure LoadCfg; override; procedure SaveCfg; override; end; procedure TCourierConfig.LoadCfg; begin with CfgFile do begin ServerName:=ReadString('Courier30','ServerName','localhost'); BaseName:=ReadString('Courier30','BaseName','Courier30'); UserName:=ReadString('Courier30','UserName','CoureirOper'); Password:=ReadString('Courier30','Password','courier'); AutoLogin:=ReadBool('Courier30','AutoLogin',false); FullConnectString:=ReadBool('Courier30','FullConnectString',false); ConnectString:=ReadString('Courier30','ConnectString', 'Provider=SQLOLEDB.1;Password=Courier;Persist Security Info=True;User ID=CourierOper;Initial Catalog=Courier30;Data Source=DIMKA;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=8192;Workstation ID=DIMKA'); PacketSize:=ReadInteger('Courier30','PacketSize',8192); DocStartDate:=StrToDate(ReadString('Courier30','DocStartDate','1.01.2003')); CodePeriod:=ReadInteger('Courier30','CodePeriod',prEtotGod); fFullScreen:=ReadBool('Courier30','FullScreen',false); OrderTemp:=ReadString('Templates','OrderTemp',''); OtvodTemp:=ReadString('Templates','OtvodTemp',''); PathListText:=ReadString('Templates','PathListText',''); end; end; procedure TCourierConfig.SaveCfg; begin with CfgFile do begin WriteString('Courier30','ServerName',ServerName); WriteString('Courier30','BaseName',BaseName); WriteString('Courier30','UserName',UserName); WriteString('Courier30','Password',Password); WriteBool('Courier30','AutoLogin',AutoLogin); WriteBool('Courier30','FullConnectString',FullConnectString); WriteString('Courier30','ConnectString',ConnectString); WriteInteger('Courier30','PacketSize',PacketSize); WriteString('Courier30','DocStartDate',DateToStr(DocStartDate)); WriteInteger('Courier30','CodePeriod',CodePeriod); WriteBool('Courier30','FullScreen',fFullScreen); WriteString('Templates','OrderTemp',OrderTemp); WriteString('Templates','OtvodTemp',OtvodTemp); WriteString('Templates','PathListText',PathListText); end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2003, 20:34
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
На мой взгляд, INI лучше. Меньше маразма с установкой. Но для прог баз данных я предпочитаю иметь две таблы - users и hosts. В Users я пишу индивидуальные настройки для юзера,а в Hosts - компа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 08:38
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
Для обычных прог лучше реестр (HKEY_CURRENT_USER). Там как раз можно для каждого пользователя хранить индивидуальные настройки. А вот для многопользовательских приложений баз данных настройки лучше хранить на сервере СУБД, чтоб при переносе юзером задницы с одного компа на другой он имел одинаковые настройки. Но это IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 22:17
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
Тут ещё есть ньюансы, инсталяцию можно сделать для текущего пользователя или для всех пользователей данного компа что определяется разными разделами реестра. Это + реестру. У ini такого конечно нет. А вот мжду XML или INI ябы выбрал XML так как в нём боле структурно это получается. У меня тоже есть формы и их описание храниться в XML. И ещё + для проверки есть XSL, которые отображает схематично форму, и как бы имулирует её в HTMLе. Но если тебе XML неподходит то выбор между реестром и ini. Для ini есть ещё недостаток, с которым я столкнулся. При иснталяции в новую директорию, конфиг старый теряется, а мне надо было старые настройки, и поэтому пришлось перенести в реестр, где даже после переустановки я могу просто взят старые настройки, а не искать по всему диску старую инсталацию. Ну тут наверно самый оптимальный выход в реестре хранить такую инфу которая нужна при переустановки и для определения пользователя на компе, если установка для конкретного пользователя. А всё остальное в XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.07.2003, 02:42
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
2 Twinp. Извини за глупый вопрос - ты с XML через TXMLDataSet работал? Я в Help заглянул, там муть несусветная. Ни одного примера :(. Есть примерчик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.07.2003, 07:31
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
нет через TXMLDocument, с помощью XML Mapper либо через import type library, добавляю MSXML //--------------------------------------------------------------------------- #pragma hdrstop #include "UDict.h" //TDict* DICT = new TDict(); Msxml2_tlb::IXMLDOMDocument2* xmldict; TCOMIXMLDOMDocument2 tempdoc; Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.07.2003, 07:33
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
Да пихай все в бд, че парится? самый верный способ. тут тебе и переносимость и масштабируемость и надежность(если уж база слетит, то про ини файлы никто и не вспомнит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.07.2003, 08:31
|
|||
|---|---|---|---|
|
|||
Что лучше Реестр или ini-файлы |
|||
|
#18+
INI-Файл (в каталоге SYSTEM32) - проблема под NT-2000. У простого пользователя отсутствуют права на писание в файлы этого каталога. Как следствие нужно дать право читать/писать на конкретный файл. Реестр - HKCU - никаких проблем, кроме если пользователь заходит под другим аккаунтом, настроики приходится повторять. HKLM - таже проблема с доступом простого пользователя. Нет надобности для каждого окна иметь свой INI файл это дико как-то. Лучше как уже говорилось использовать один с разделами по именам форм. По возможность лучше использовать Реестр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.07.2003, 09:17
|
|||
|---|---|---|---|
Что лучше Реестр или ini-файлы |
|||
|
#18+
AndreyS писал:... 200К в реестре ... Andrew Campball писал:... По возможность лучше использовать Реестр ... Ну-ну Хотелось бы посмотреть на поведение винды при таком реестре. Для справки: размер реестра ограничивается ЯВНО! И автоматически не увеличивается. 2 AndreyS: храни настройки проги в реестре, в HKLM, а вот настройки конкретного юзверя - в %Home%\Applications\AppName (или как там она называется - где Documents & Settings - влом искать), в INI-файле. Или в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&tablet=1&tid=2117837]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 342ms |

| 0 / 0 |
