C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

стр.: (2) < [1] 2 >
"быстрая" альтернатива INI файлу, "быстрая" альтернатива INI файлу
svale
Отправлено: 13.09.2005, 09:06


Ученик-кочегар

Группа: Участник
Сообщений: 6



Дело в следующем.
Прога работает с большим количеством настроек (не интерфейса), на текущий момент порядка 20 тысяч. Настройки читаются один раз при загрузки программы. Проблема в том, что читает очень медленно 30-60 сек. в зависимости от машины.
Существует ли более быстрая альтернатива ини-файлу? (реестр не подходит).
Как вариант XML-файла? Будет ли эффект?
AVC
Отправлено: 13.09.2005, 09:11


Ветеран

Группа: Модератор
Сообщений: 1583



А вы уверены, что у вас проблема именно в скорости считывания, а не в скорости выполнения считанного ?
svale
Отправлено: 13.09.2005, 09:36


Ученик-кочегар

Группа: Участник
Сообщений: 6



Практически уверен.
Файл разбит на секции примерно по 600 параметров, читается в цикле и распихивается по массивам. На чтение каждой секции уходит примерно по 1,5 секунды. 4 параметра — строки, пятый — целое число.
Vlad
Отправлено: 13.09.2005, 09:48


Машинист паровоза

Группа: Участник
Сообщений: 231



Использовать базу данных, можно в качестве базы — текстовый файл.
olegenty
Отправлено: 13.09.2005, 10:25


Ветеран

Группа: Модератор
Сообщений: 2412



да, я бы тоже использовал БД. вполне подойдёт DBF + компоенет прямого доступа к DBF (есть на torry)
Asher
Отправлено: 13.09.2005, 10:32


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
а TMemIniFile не пробовали?
avc*
Отправлено: 13.09.2005, 10:35


Не зарегистрирован







QUOTE

Файл разбит на секции примерно по 600 параметров, читается в цикле и распихивается по массивам. На чтение каждой секции уходит примерно по 1,5 секунды. 4 параметра — строки, пятый — целое число

А я бы написал свой парсер. Файл может быть текстовым или специального формата (еше быстрее, но тогда нужен редактор).
svale
Отправлено: 13.09.2005, 11:22


Ученик-кочегар

Группа: Участник
Сообщений: 6



Попробовал создать парадоксовскую табличку, доступ стандартными средствами(через Table) — скорость СУПЕР, читается моментально.

olegenty, компонент прямого доступа к DBF — какие преимущества?

Asher, TMemIniFile, в чем преимущество перед Tinifile?

avc*, я думал перекодировать файл каким-то образом в двоичный формат, но сочинять отдельную прогу совсем не хочется.

Наверное остановлюсь на БД, спасибо.
Asher
Отправлено: 13.09.2005, 11:27


Мастер участка

Группа: Модератор
Сообщений: 550



QUOTE (svale @ 13/09/2005, 12:22)
Asher, TMemIniFile, в чем преимущество перед Tinifile?

А хелп почитать?
QUOTE
Unlike the TIniFile object, which also encapsulates INI file data, TMemIniFile buffers all changes to the INI file. The INI file is read once, when the object is first created. Data from the INI file is stored in nested string lists.
olegenty
Отправлено: 13.09.2005, 11:27


Ветеран

Группа: Модератор
Сообщений: 2412



преимущество в том, что если проге даром не нужна работа с БД посредством BDE, то таскать BDE с программой ради загрузки параметров — ну это как-то "даунито синдромо"...

собственно преимущество — прямой доступ к таблице, без посредника в лице BDE.
svale
Отправлено: 13.09.2005, 11:36


Ученик-кочегар

Группа: Участник
Сообщений: 6



Ага, понятно.
olegenty, а какой компонет не подскажешь?
Vlad
Отправлено: 13.09.2005, 11:59


Машинист паровоза

Группа: Участник
Сообщений: 231



QUOTE
Файл разбит на секции примерно по 600 параметров, читается в цикле и распихивается по массивам. На чтение каждой секции уходит примерно по 1,5 секунды. 4 параметра — строки, пятый — целое число..
Не заморачивайся, читай как текстовый файл. Один цикл, а быстрее чем fread и разные интерпритации read, ты скорость выше не получишь. Меньше операций -выше скорость, единственно удобство занесения, редактирование параметров
svale
Отправлено: 13.09.2005, 12:11


Ученик-кочегар

Группа: Участник
Сообщений: 6



Остановился на таблице.
Получилось даже лучше чем хотел. И читает быстро, просматривать и заполнять удобнее.
olegenty
Отправлено: 13.09.2005, 12:13


Ветеран

Группа: Модератор
Сообщений: 2412



см. тут: http://www.torry.net/pages.php?id=564
olegenty
Отправлено: 13.09.2005, 12:22


Ветеран

Группа: Модератор
Сообщений: 2412



вот ещё: http://www.activeserverpages.su/redir.asp?...www.majar.nm.ru
svale
Отправлено: 13.09.2005, 14:28


Ученик-кочегар

Группа: Участник
Сообщений: 6



Спасибо за ссылки, нашел подходящий компонент.
Sl@Sh
Отправлено: 13.09.2005, 17:17


Мастер участка

Группа: Участник
Сообщений: 383



RxFormStorage (кажется он) из RxLibrary может автоматом( только его для этого настроить нужно) сохранть параметры или в ИНИ или в реестр.
Rius
Отправлено: 15.09.2005, 12:25


Мастер участка

Группа: Участник
Сообщений: 321



самое быстрое — построчный текстовый файл (не ini)
еще и удобное — xml-файл + стандартный TXMLDocument

отдельный компонент, было бы для чего, гы biggrin.gif
olegenty
Отправлено: 15.09.2005, 12:40


Ветеран

Группа: Модератор
Сообщений: 2412



ну насчёт быстроты XML..., сдаётся мне, не правда это...

Отредактировано olegenty — 15/09/2005, 13:41
AVC
Отправлено: 15.09.2005, 12:40


Ветеран

Группа: Модератор
Сообщений: 1583



>самое быстрое — построчный текстовый файл
Не. Это оптимальное для скорость удобство. А самое быстрое — двоичный файл блоков фиксированного или в крайнем случае известного перед считыванием размера.
Никогда БД не разовьет скорости даже fread. А ведь еще можно и "поизвращаться" с ускорениями. smile.gif
Но если автору хватает скорости и удобства БД....
Sl@Sh
Отправлено: 15.09.2005, 18:51


Мастер участка

Группа: Участник
Сообщений: 383



INI формат оптимален потому, что его может редактировать даже не программист. Если эта возможность вам нужна, то ИНИ лучше всего. Если нет, лучше конечно бинарный файл.

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

Успехов!

Отредактировано Sl@Sh — 15/09/2005, 18:53
Rius
Отправлено: 16.09.2005, 11:51


Мастер участка

Группа: Участник
Сообщений: 321



редактировать удобно и в XML, но все равно, кому придется править 20000 строк вручную...
для интереса проверил с txmldocument:
- 1млн записей, файл 31МБ, оперы прога жрет 353МБ
скорость, включая файловые операции:
- создание — 1.5 мин, чтение — 18 секунд, если просматривать не все подряд, то быстрее

пример (75кБ):

Отредактировано Rius — 16/09/2005, 14:53

User Attached Image Скачать файл
xmlspeed_2005.09.16___13.55.rar


AVC
Отправлено: 16.09.2005, 13:59


Ветеран

Группа: Модератор
Сообщений: 1583



Для спарвки fwrite (дамп памяти) 31М запись 1.38 сек, чтение 0.07.
Чтение быстрое скорее всего из-за буферизации диска.
Rius
Отправлено: 16.09.2005, 15:04


Мастер участка

Группа: Участник
Сообщений: 321



тут не чтение с диска долгое, а разбор нод в xml-документе., загружает-то также быстро
Vlad
Отправлено: 16.09.2005, 15:18


Машинист паровоза

Группа: Участник
Сообщений: 231



буферизация — не буферизация, до барабана...по отношению к любым изворотам (библиотекам, компонентам...) fread and fwrite будут быстрее . одна — библиотечная функция или куча , которых нужно обработать, и которые на нижнем уровне опятьто таки используют fread. Просто пусть выбирает человек, скорость (если критично) — fread , удобство — база данных или xml.
** Admin
Отправлено: 16.09.2005, 20:07


Не зарегистрирован







Если скорость работы с таблицей БД устраивает — останавливайтесь
на ней.
Минусы -
1. если соберетесь ставить/переносить на разные компьютеры
придеться тащить-ставить BDE — а это тоже не есть хорошо.
2. Скорость все равно ниже чем при работе с бинарным файлом.
3. При многопользовательской работе с таблицей начнуться глюки.

Поставите какое-нибудь левое приложение на компьютер,
оно может при установке неверно перезаписать ваше BDE,
начнется куча глюков — то есть вы будете всегда привязаны к BDE
(или к его аналогу). Или без BDE, с компонентом прямого доступа:
Допустим выйдет C++Builder 7..8..9..10..11..12..
а компонент прямого доступа автор под него не переделает,
все, попали — перейти с этой прогой на новый C++Builder не удастся.

Бинарный файл — более универсальное решение.
Во-первых — скорость работы значительно выше,
во-вторых нет зависимости от BDE или компонентов прямого доступа,
значит программа более переносима.

А оформить работу с этим файлом — удобно в виде класса
с методами чтения/записи.
olegenty
Отправлено: 17.09.2005, 06:52


Ветеран

Группа: Модератор
Сообщений: 2412



насчёт компонента — убедили, лучше свой написать smile.gif
Rius
Отправлено: 17.09.2005, 07:22


Мастер участка

Группа: Участник
Сообщений: 321



Admin так BDE не единственный, тот же Jet OLEDB + *.mdb везде будет работать без необходимости что-либо доустанавливать.
Георгий
Отправлено: 18.09.2005, 01:03


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE (Rius @ 17/09/2005, 08:22)
Admin так BDE не единственный, тот же Jet OLEDB + *.mdb везде будет работать без необходимости что-либо доустанавливать.

не будет — если драйвера БД (dll) не стоят, но не будет работать
Rius
Отправлено: 19.09.2005, 05:36


Мастер участка

Группа: Участник
Сообщений: 321



в чистой свеженькой windows xp все необходимое для mdb уже есть, на других чистых системах не проверял к сожалению, но при наличии MS Office все должно работать 100%.
стр.: (2) < [1] 2 >
Вернуться в Вопросы программирования в C++Builder