Ich verwende ein FFI zu C, um mittelgroße Datenmengen (~ 100 MB) an ein C-Programm zu senden - nur eine Liste von Zeichenfolgen. Jedoch scheinen alle Methoden, die ich verwendet habe, unangemessen lange Zeit zu benötigen (~ 10 Sekunden). Beim Profiling scheint es sich um die tatsächliche Speicherzuweisung zu handeln, die Zeit braucht. Ich habe versucht:Haskell FFI Speicherzuweisung Leistungsproblem
- Senden als reguläre Strings (
newCString
) - Umwandlung in ByteStrings (
unsafeUseAsCString
) - Umwandlung in Vektor von Zeichen (
unsafeWith >>= withForeignPtr ...
)
Was ist der schnellste Weg, Daten über einen C FFI senden?
Wie lang sind diese Zeichenfolgen? Wie viele davon? Können Sie uns nicht ein kleines Beispiel geben, das das Problem reproduziert? – Bakuriu
Wie werden Ihre Daten dargestellt? –
Es ist ein Standardtyp mit 5 Feldern, und ich konvertiere zu/von Strings, um an einen Datenbankclient in C zu übergeben. Ich habe zusätzlich versucht, alles auf einmal mit mallocBytes zuzuteilen und es scheint genauso langsam zu sein. Ein weiterer Datenpunkt ist, dass die GHC-Profilerstellung ergab, dass ~ 15 GB für diese ~ 100 MB-Datenmenge zugewiesen wurden. – ooblahman