Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большие массивы, Нехватка памяти 
:(
    Опции темы
Экскалупатор
Дата 11.2.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



nuke4303, тут узкий момент есть, в смысле что использовать базу это больше нагрузить систему, с файлами будет шустрее(это личное ИМХО). я бы все же просто дополнял блоки до максимального размера и писал их в бинарный файл, читать файл можно асинхронно, в отдельном потоке, зарание читая очередной блок информации и ставя его в очередь на обработку, а с другой стороны сохранять данные когда они достигнут какой нить критической массы(пару сотен метров, к примеру). в итоге получим что и память не будет забиваться полностью и в производительности не сильно потеряешь(это конечно с учетом что в системе не одно ядро). работа с базой будет проходить по такому же принципу, но база тяжелее файла(у нее должен работать свой сервер, запросы обрабатывать и пр....). если делать базу то проще писать, если делать с файлами то скорее всего будет шустрее работать(с учетом твоей личной грамотности как разработчика, конечно)

ну а по поводу разных блоков повторюсь, приводи их к одному размеру, тогда будет проще писать их и читать. или можно хранить информацию о величине блока в самом файле. к примеру предположим у тебя есть блок размером 100 байт, и блок размером в 200 байт. в файл можно записать так: 
100[]200[]...

т.е. сначала размер блока, потом(вместо []) сам блок данных, потом следующая пара. минус всего этого это сложность реализации.
PM MAIL ICQ   Вверх
nuke4303
Дата 11.2.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Чтобы подогнать все файлы к одному размеру нужно знать размер самого большого блока(на абум делать неполучится так как размер блоков может сильно варьироваться и быть непредсказуем), а как узнать размер самого большого блока не загрузив их все в память и не плодя множества временных файлов!?...возможно бд будет оптимальным вариантом, размер файла не сильно важен, главное чтобы оператива была свободна
PM MAIL   Вверх
Экскалупатор
Дата 11.2.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



а по поводу хранения информации о блоке?
PM MAIL ICQ   Вверх
nuke4303
Дата 11.2.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



А что по информации? Если хранить блоки в одном файле, то при замене блока придется перезаписывать весь файл, если взять стандартный какойто размер метаблока и в него всовывать блоки, то стоит проблема подбора этого максимального блока-контейнера....хочется какойто оптимальный вариант по производительность/удобство.....сложность реализации не важна
PM MAIL   Вверх
Экскалупатор
Дата 11.2.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



я имел в виду хранить размер блока перед самим блоком.

Цитата(Экскалупатор @  11.2.2011,  13:19 Найти цитируемый пост)
можно хранить информацию о величине блока в самом файле. к примеру предположим у тебя есть блок размером 100 байт, и блок размером в 200 байт. в файл можно записать так: 100[]200[]...т.е. сначала размер блока, потом(вместо []) сам блок данных, потом следующая пара. минус всего этого это сложность реализации.


PM MAIL ICQ   Вверх
nuke4303
Дата 11.2.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



А как тогда заменить например один блок другим большего размера....опять же повторюсь, придется тада считать все вышестоящие блоки(в память) и записать файл по новому...нехотелось бы делать столько лишних манипуляций.....хотя я сразу не понял конешно идею про размер блока, но она привлекательно выглядет
А есть тут народ который работал с темже SQLite и данными большими внем, хотелось бы узнать мнение, что быстрей бы работало встроенная СУБД или вручную формировать файл("дамп памяти")?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.