Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение файла в Thread? [D7, WinXP]


Страницы:   1 2

Alex_C ©   (2011-09-29 12:22:00) 

Посоветуйте как правильно сделать:
есть локальная БД VolgaTable.
После каждого изменения в базе, фаил базы я записываю на диск.
Есть проблема: если в качестве диска использутся флешка, то сохранение происходит порядка 3 сек - что долго. Хочется этот процесс от пользователя "скрыть". Как идея - записывать на диск базе в отдельном Thread.
Вопрос: можно ли это делать? И если да, то как лучше это сделать?


Inovet   (2011-10-01 13:13:00) [21]

> [9] sniknik ©   (29.09.11 17:53)
> брать таблицу в памяти, и вместо изменений сохранять всю?
> где логика?

Флешку жалко


Inovet   (2011-10-01 13:12:00) [22]

> [6] Омлет ©   (29.09.11 15:56)
> для локальных БД так и не придумали
>
> SQLite.

Firebird embedded.

Атор таблицк называет базой?


sniknik   (2011-10-01 11:20:00) [23]

> Значит верное направление :)
два идиота нашли друг друга... совет вам да любовь.

на критику в нелогичности самой идеи внимания лучше не обращать... ну и что что для изменений единственной позиции делается перезапись всей много мегабайтной (иначе откуда тормоза в 3 сек?) таблицы? и хрен с ним что гробится флешка и т.д. там где любой нормальный движок изменит только саму запись (4кб если она в одном кластере диска) и займет это менее тысячной доли секунды на любом размере файла, без всяких извращений...
идиот уже решил, что выбранный им движок/логика работы самая верная, и просит он не советов, а подтверждений своему решению... на все остальное прикрыть глаза иначе не дай бог придется учить новое, и переделывать свое творение по каким то странным для него правилам работы из учебников... свой "велосипед" он же ближе к телу, роднее.


Alex_C   (2011-10-01 09:37:00) [24]


> искать в компоненте SaveToStream и делать типа


Прикольно - именно так и сделал в итоге :)
А тут смотрю - и совет такой же. Значит верное направление :)


Slym   (2011-09-30 06:48:00) [25]

искать в компоненте SaveToStream и делать типа
db.SaveToStream(MemoryStream);//быстрая операция в памяти
ThreadSaveStream(MemoryStream);//в потоке не блокирую интерфейс сохраняем Stream

база не блокируется во время фонового сохранения


Ega23   (2011-09-29 21:25:00) [26]


> вообще ее последняя версия от 2006 года


вообще с 2006 года 5 лет прошло... :)


QAZ   (2011-09-29 19:22:00) [27]


> я использую локальную БД  VolgaTable - достаточно старенькая
> разработка 2000 года, но на мой взгляд ничего лучше для
> локальных БД так и не придумали. Жаль что автор прекратил
> ее поддержку.

вообще ее последняя версия от 2006 года


Cobalt   (2011-09-29 18:20:00) [28]

Частые перезаписи убивают флешку, как бы.
Так что в этом всё верно.
Представь, что вместо базы у тебя какой-нить txt или xml
На каждый чих записывать?


sniknik   (2011-09-29 17:53:00) [29]

> ваще не в тему. Не ускоришь.
только запутаешь... типа нажал на сохранить, оно мигнуло и сказало Ок, а сомо в это время в потоке пыжится, записывает... но пользователь уже видит Ок!!! и что ему мешает флешку выдернуть?
вот авто сохранение, типа "бекапа изменений в ворде" другое дело...

> После каждого изменения в базе, фаил базы я записываю на диск.
?
> но на мой взгляд ничего лучше для локальных БД так и не придумали.
брать таблицу в памяти, и вместо изменений сохранять всю? где логика?


Ega23   (2011-09-29 17:21:00) [30]


>  у меня такой вопрос - нет ли каких ограничений на запись
> на диск при работе с Thread?


ИМХО, дополнительный tread тут ваще не в тему. Не ускоришь.


Alex_C   (2011-09-29 17:13:00) [31]

Немного не в тему: есть ли для SQLite надстройка, позволяющая использовать SQLite как и BDE (чтоб мого кода не перелапачивать)?


Омлет   (2011-09-29 15:56:00) [32]

> нет ли каких ограничений на запись на диск при работе с Thread

Всё те же, что и в основном потоке.

> достаточно старенькая разработка 2000 года, но на мой взгляд ничего лучше для локальных БД так и не придумали

SQLite.


Alex_C   (2011-09-29 15:50:00) [33]

Спасибо за ответы. Поясню - я использую локальную БД  VolgaTable - достаточно старенькая разработка 2000 года, но на мой взгляд ничего лучше для локальных БД так и не придумали. Жаль что автор прекратил ее поддержку.
Работает этот компонент так: база целиком считывается в память, а на диск база сохраняется принудительно через SaveToFile.
С критическими секциями все понятно, у меня такой вопрос - нет ли каких ограничений на запись на диск при работе с Thread?


QAZ   (2011-09-29 14:01:00) [34]


> сохранение происходит порядка 3 сек - что долго. Хочется
> этот процесс от пользователя "скрыть". Как идея - записывать
> на диск базе в отдельном Thread

а что будет,если пользователь не видя процесса сохранения решит выдернуть флешку?


Cobalt   (2011-09-29 13:00:00) [35]

А как ты с базой работаешь?
Считываешь полностью в память и загружаешь куда-то, или через компонент, который сам умеет записывать БД?


stas   (2011-09-29 12:28:00) [36]

Только я не понял, а база что не на диске хранится?
вообще не правильно перезаписывать всю БД при каждом изменении.


stas   (2011-09-29 12:26:00) [37]

Делаете Thread и выполняете в нем процедуру сохранения ).
Так же может понадобится CriticalSection, но это зависит от организации работы с Thread.
Вопрос общий, будут проблемы задавайте более конкретные вопросы...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо