Большие буфера данных
От: vladt  
Дата: 06.07.04 11:44
Оценка:
Доброе время суток!

Задачка:
есть файл — он считывается в процедуре, обрабатывается
на выходе должен получиться блок данных, который содержит часть файла.
Вот тут возникает проблема, как представить этот блок.
Если делать byte *ar, то тут проблема в том, что готовый блок может быть очень очень большим и следовательно нехилый нагруз на память.

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

Кто нибудь сталкивался с такой проблемой и какие есть варианты для ее решения?
... << RSDN@Home 1.1.3 stable >>
Re: Большие буфера данных
От: Кодт Россия  
Дата: 06.07.04 11:51
Оценка:
Здравствуйте, vladt, Вы писали:

V>Задачка:

V>есть файл — он считывается в процедуре, обрабатывается
V>на выходе должен получиться блок данных, который содержит часть файла.
V>Вот тут возникает проблема, как представить этот блок.
V>Если делать byte *ar, то тут проблема в том, что готовый блок может быть очень очень большим и следовательно нехилый нагруз на память.

V>Важное замечание — выходной блок данных должен быть пригоден

V>для передачи по сети, те должно быть что то типа байт массива.
V>Задачка усугубляется тем, что нельзя самому писать поток по сети на приемник.

V>Кто нибудь сталкивался с такой проблемой и какие есть варианты для ее решения?


1. Хранить и обрабатывать блок на стороне сервера, и отдавать клиенту кусками, по запросу.
Как именно этот блок хранится — не особо важно. Например, в файле с произвольным доступом.

Если клиентов много, то блоки нужно уникально идентифицировать, грубо говоря, хэндлами этих файлов.
Для межмашинного взаимодействия, когда нет гарантии, что клиент отправит запрос на закрытие хэндла, — ввести срок хранения. Скажем, по истечении 10 минут после последнего запроса закрывать хэндл (и убивать блок) принудительно.

2. Хранить/передавать блок в сжатом виде. Например, с помощью zlib или, если известен характер данных, — собственным упаковщиком.
Перекуём баги на фичи!
Re[2]: Большие буфера данных
От: vladt  
Дата: 06.07.04 12:29
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, vladt, Вы писали:


V>>Задачка:

V>>есть файл — он считывается в процедуре, обрабатывается
V>>на выходе должен получиться блок данных, который содержит часть файла.
V>>Вот тут возникает проблема, как представить этот блок.
V>>Если делать byte *ar, то тут проблема в том, что готовый блок может быть очень очень большим и следовательно нехилый нагруз на память.

V>>Важное замечание — выходной блок данных должен быть пригоден

V>>для передачи по сети, те должно быть что то типа байт массива.
V>>Задачка усугубляется тем, что нельзя самому писать поток по сети на приемник.

V>>Кто нибудь сталкивался с такой проблемой и какие есть варианты для ее решения?


К>1. Хранить и обрабатывать блок на стороне сервера, и отдавать клиенту кусками, по запросу.

К>Как именно этот блок хранится — не особо важно. Например, в файле с произвольным доступом.

К>Если клиентов много, то блоки нужно уникально идентифицировать, грубо говоря, хэндлами этих файлов.

К>Для межмашинного взаимодействия, когда нет гарантии, что клиент отправит запрос на закрытие хэндла, — ввести срок хранения. Скажем, по истечении 10 минут после последнего запроса закрывать хэндл (и убивать блок) принудительно.

Есть ли другие варианты кроме как генерить файл на лету.
Может можно реализовать это в виде stream ? Те я буду писать в byte stream
и передающая запчасть будет strem уже перенапрявлять куда надо?
Есть ли кроме файлов, memory, байт stream в Сpp?
Полезных ссылок не подкинете ?
Спасибо.
... << RSDN@Home 1.1.3 stable >>
Re: Большие буфера данных
От: merlinJap  
Дата: 06.07.04 15:31
Оценка:
Здравствуйте, vladt, Вы писали:

V>Доброе время суток!


V>Задачка:

V>есть файл — он считывается в процедуре, обрабатывается
V>на выходе должен получиться блок данных, который содержит часть файла.
V>Вот тут возникает проблема, как представить этот блок.
V>Если делать byte *ar, то тут проблема в том, что готовый блок может быть очень очень большим и следовательно нехилый нагруз на память.

V>Важное замечание — выходной блок данных должен быть пригоден

V>для передачи по сети, те должно быть что то типа байт массива.
V>Задачка усугубляется тем, что нельзя самому писать поток по сети на приемник.

V>Кто нибудь сталкивался с такой проблемой и какие есть варианты для ее решения?


Посмотри в сторону CreateFileMapping...
Удачи
С уважением merlinjap.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.