Sto utilizzando un FFI in C per inviare quantità di dati medio-grandi (~ 100 MB) a un programma C: solo un elenco di stringhe. Tuttavia, tutti i metodi che ho usato sembrano richiedere una quantità di tempo irragionevole (~ 10 sec). Dopo la creazione del profilo, sembra che l'allocazione di memoria effettiva richieda tempo. Ho provato:Problema di prestazioni di allocazione della memoria di Haskell FFI
- invio come stringhe regolari (
newCString
) - conversione in stringhe di byte (
unsafeUseAsCString
) - conversione al vettore di caratteri (
unsafeWith >>= withForeignPtr ...
)
Qual è il modo più veloce per inviare dati attraverso un C FFI?
Quanto sono lunghe quelle stringhe? Quanti di loro? Non sei in grado di fornire un piccolo esempio che riproduce il problema? – Bakuriu
Come vengono rappresentati i dati per iniziare? –
È un tipo standard con 5 campi e sto convertendo in/da stringhe per passare a un client di database in C. Ho anche provato a allocare tutto in una volta con mallocBytes e sembra che sia altrettanto lento. Un altro dato è che la profilazione di GHC indica che sono stati allocati ~ 15 GB per questo set di dati di ~ 100 MB. – ooblahman