Я хотел бы отправить очень большую (~ 8 ГБ) структуру данных через сеть, поэтому я использую модуль Marshal для преобразования его в байты.
Моя проблема в том, что память удваивается, потому что нам нужно хранить оба представления (исходные данные и данные Marshaled).
Есть ли простой способ превратить маршала в поток вместо этого? Это позволит избежать полного маршалловского представления исходной структуры данных.
Я думал о Marshaling для out_channel, в котором я открыл канал со вторым потоком и читал из канала в основном потоке в s Stream, но я думаю, что может быть более простое решение.
Спасибо!
Редактировать: Ответить на комментарий:
На верхнем уровне:
let a = Array.make (1024*1024*1024) 0. ;; (* Takes 8GB of RAM *)
let data = Marshal.to_bytes a [Marshal.Closures] ;; (* Takes an extra 8GB *)