Многопоточное скачивание крупных файлов (~900 мб) будет ли переполнять оперативную память?

Столкнулся с такой проблемой, (а точнее она у меня крутится в голове) будет ли переполняться память, если я буду отправлять большой массив байтов пользователю. Отправление данных я произвожу в json формате и там же храню данные о файле и его содержимое (байтовый массив). Общий размер выходит в районе 3-5 ГБ. Если у пользователей будет всего 2-4 ГБ оперативки?


Ответы (1 шт):

Автор решения: aepot

3 гига в JSON. С форматом передачи данных явно что-то пошло не так. Пытаетесь решить проблему, которую сами же создали. Файлы должны передаваться через ответ сервера по типу файла, а не через JSON. В JSON можете положить ссылку на файл, чтобы клиент мог его скачать отдельно.

Сериализуя двоичный файл в текстовый формат типа Base64, дополнительно увеличиваете размер ответа. Я как пользователь с 5-мегабитным LTE каналом связи и 100-гигами лимита трафика в месяц, спасибо бы за такое точно не сказал.

Ну и конечно же, то что должно скачиваться на диск, нет никакого смысла хранить в оперативной памяти ни одной лишней секунды. Обычный буфер чтения и Stream - вполне себе качественный вариант скачки файлов без хранения их в памяти.

Объем оперативы при этом значения не имеет совершенно никакого, даже файл весом в пару мегабайт нет смысла в память затягивать целиком, если точка его назначения - диск.

Если у пользователей будет всего 2-4 ГБ оперативки?

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

→ Ссылка