Столкнулся с такой проблемой, (а точнее она у меня крутится в голове) будет ли переполняться память, если я буду отправлять большой массив байтов пользователю. Отправление данных я произвожу в json формате и там же храню данные о файле и его содержимое (байтовый массив). Общий размер выходит в районе 3-5 ГБ. Если у пользователей будет всего 2-4 ГБ оперативки?
-
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%B0%D1%87%D0%BA%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86 – Владимир Клыков Dec 26 '22 at 23:14
-
И что это отменяет? если у пользователя не хватит физической памяти(если вдруг вы попытаетесь все запихнуть в оперативку, но зачем не понимаю) - используется подкачка, и часть памяти жесткого диска будет использована как очень медленная ОЗУ :) – Владимир Клыков Dec 26 '22 at 23:16
-
@ВладимирКлыков я пересмотрел статью, и поэтому удалил пост ) То-есть Вы предлагаете использовать виртуальную память, верно? – MedWed Dec 26 '22 at 23:18
-
Нет конечно, я такой глупости не предлагал, я предлагал не держать такой объем в ОЗУ, и я досих пор не вижу необходимости в этом :) – Владимир Клыков Dec 26 '22 at 23:45
-
Что ж у вас за данные такие? Мне кажется, тут нужно в первую очередь подумать, как уменьшить количество хранимых и передаваемых данных. Наверняка это можно как-то сделать. – CrazyElf Dec 27 '22 at 05:42
1 Answers
3 гига в JSON. С форматом передачи данных явно что-то пошло не так. Пытаетесь решить проблему, которую сами же создали. Файлы должны передаваться через ответ сервера по типу файла, а не через JSON. В JSON можете положить ссылку на файл, чтобы клиент мог его скачать отдельно.
Сериализуя двоичный файл в текстовый формат типа Base64, дополнительно увеличиваете размер ответа. Я как пользователь с 5-мегабитным LTE каналом связи и 100-гигами лимита трафика в месяц, спасибо бы за такое точно не сказал.
Ну и конечно же, то что должно скачиваться на диск, нет никакого смысла хранить в оперативной памяти ни одной лишней секунды. Обычный буфер чтения и Stream - вполне себе качественный вариант скачки файлов без хранения их в памяти.
Объем оперативы при этом значения не имеет совершенно никакого, даже файл весом в пару мегабайт нет смысла в память затягивать целиком, если точка его назначения - диск.
Если у пользователей будет всего 2-4 ГБ оперативки?
А если у пользователя вообще телефон или наручные часы, или чайник для кипячения воды? Если вы не пишете сложные игры, требующие загрузки кучи ресурсов в память, то вас в принципе не должно волновать, сколько у пользователя памяти. Представьте, что ее приблизительно вообще нет. Экономьте ресурсы компа и нервы пользователя.
- 49,560