Сообщение Ленивая сериализация от 01.11.2020 23:39
Изменено 02.11.2020 0:04 Слава
Ленивая сериализация
У меня есть код для загрузки произвольных объектов на AWS S3:
Что здесь происходит:
Сериализатор пишет в StreamWriter
StreamWriter пишет в компрессор BrotliStream
BrotliStream пишет в MemoryStream
TransferUtilityUploadRequest содержит в себе MemoryStream
TransferUtility исполняет TransferUtilityUploadRequest, загружая сериализованный и сжатый объект на S3.
Но перед отправкой на S3 сериализация проходит полностью, в буфер в памяти, MemoryStream. Как бы мне избавиться от буфера и производить всю последовательность "сериализация-сжатие-запись на носитель" на лету, с минимальным использованием промежуточных буферов?
Код | |
| |
Что здесь происходит:
Сериализатор пишет в StreamWriter
StreamWriter пишет в компрессор BrotliStream
BrotliStream пишет в MemoryStream
TransferUtilityUploadRequest содержит в себе MemoryStream
TransferUtility исполняет TransferUtilityUploadRequest, загружая сериализованный и сжатый объект на S3.
Но перед отправкой на S3 сериализация проходит полностью, в буфер в памяти, MemoryStream. Как бы мне избавиться от буфера и производить всю последовательность "сериализация-сжатие-запись на носитель" на лету, с минимальным использованием промежуточных буферов?
Ленивая сериализация
У меня есть код для загрузки произвольных объектов на AWS S3:
Что здесь происходит:
Сериализатор пишет в StreamWriter
StreamWriter пишет в компрессор BrotliStream
BrotliStream пишет в MemoryStream
TransferUtilityUploadRequest содержит в себе MemoryStream
TransferUtility исполняет TransferUtilityUploadRequest, загружая сериализованный и сжатый объект на S3.
Но перед отправкой на S3 сериализация проходит полностью, в буфер в памяти, MemoryStream. Как бы мне избавиться от буфера и производить всю последовательность "сериализация-сжатие-запись на носитель" на лету, с минимальным использованием промежуточных буферов?
Обновление:
Конкретно с S3 так не получится, потому что S3 так не работает. Но вопрос остаётся прежним — как сделать такой stream, который при чтении будет пополняться сам из указанного источника, пока источник не закончится? С кусками по 4килобайта, например.
Код | |
| |
Что здесь происходит:
Сериализатор пишет в StreamWriter
StreamWriter пишет в компрессор BrotliStream
BrotliStream пишет в MemoryStream
TransferUtilityUploadRequest содержит в себе MemoryStream
TransferUtility исполняет TransferUtilityUploadRequest, загружая сериализованный и сжатый объект на S3.
Но перед отправкой на S3 сериализация проходит полностью, в буфер в памяти, MemoryStream. Как бы мне избавиться от буфера и производить всю последовательность "сериализация-сжатие-запись на носитель" на лету, с минимальным использованием промежуточных буферов?
Обновление:
Конкретно с S3 так не получится, потому что S3 так не работает. Но вопрос остаётся прежним — как сделать такой stream, который при чтении будет пополняться сам из указанного источника, пока источник не закончится? С кусками по 4килобайта, например.