![]() |
|
|
![]()
|
|
| AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Имеется программа, работающая с числовой и текстовой информацией. Сохранение/загрузка идет через сериализацию. Все прекрасно работает, но появилась мысль добавить бантики в виде различных картинок и, возможно, другой мультимедийной инфы. Понятно, что грузить все это с основной информацией через сериализацию - мягко говоря, крайне неэффективно. Хотелось бы основную инфу грузить при открытии файла, а картиночки - по мере необходимости. Подозрительно посмотрел в сторону структурированных хранилищ, которые позволяют это делать, но по некоторым соображениям не хотелось бы их использовать. Базы данных не подходят совершенно. Кто нибудь занимался подобным извратом? Подскажите! Не могу сообразить, как реализовать.
Основные требования: 1. Все данные хранятся в одном файле (весьма желательно, если только возможно) 2. Основная информация грузится/сохраняется вся и сразу (через сериализацию) 3. Бантики извлекаются/сохраняются по мере необходимости. Надеюсь, не слишком сумбурно получилось, голова совсем не соображает. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
дак чего паришься? Ты разбей на 2 раздела файл. 1 - это собственно инфа, 2- всякая шелуха. В начале файла укажи сколько байт информации и шелухи. При сериализации вторую чатсть просто куском вгоняй. А вдобавок имей метод, который работает только со второй частью, этот метод вызывай когда надо. Ну вообщем покумекай на эту тему
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Проблема в том, что обе части будут изменяться в размерах (по мере добавления/удаления информации). И если первый кусок (основную информацию) можно рассматривать как единое целое, то для второй части требуется быстрый и удобный доступ к каждому отдельному элементу, а также минимизировать количество операций чтения/записи - собственно, это моя основная задача. А у меня, в каком бы направлении не думал, все мысли возвращаются к внутрифайловой FAT Да нет, изврат это!!! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Сначала оцени объем бантиков. Если не очень большой (< 100 mb) смело грузи куском в оперативку и там извращайся как хочешь. Если больше - то же самое, только не в обычную память, а в файл-мэппинг. Если совсем много (так что все целиком грузить не хочется) - подумай все же о двух файлах. Главное четко сознавать: либо ты работаешь с файлом как с документом, т.е. грузишь и сохраняешь его целиком, либо как с базой данных. Причем первое совсем не подразумевает того, что ты будешь формировать готовые объекты (что может быть долго) - можно просто загружать "сырые" куски по-быстрому, и по мере надобности с ними ковыряться. Главное - чтобы в памяти (или в своп-файле) было все, что нужно для записи файла-документа с нуля. Сериализацию лучше реализовать так, чтобы коду было по барабану, откуда читать\писать - из файла или из памяти - лучше всего для этого потоки стандартной библиотеки подходят. Другими словами, отделить открытие\закрытие файла от самого чтения\записи.
-------------------- ... |
|||
|
||||
| AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Достаточно трудно: зависит от того, что пользователь туда напихает. Так что от нулевого до сотен мегабайт. Думаю. С двумя файлами гораздо легче. Но есть риск, что нерадивый пользователь скопирует куда-нибудь один и забудет про другой. Интересная мысль. Earnest, спасибо за наводки, буду думать. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |