私はFFIからCまでの大量のデータ(〜100MB)をCプログラムに送ります。文字列のリストだけです。しかし、私が使用した方法のすべては、不合理な時間(約10秒)かかると思われます。プロファイリングすると、時間がかかる実際のメモリ割り当てのように見えます。私が試した:Haskell FFIメモリ割り当てパフォーマンスの問題
- は、通常の文字列としてバイト文字列に(
newCString
) - 変換文字のベクトル(
unsafeWith >>= withForeignPtr ...
)
最速の方法にはどのようなものですから(unsafeUseAsCString
)
これらの文字列の長さはどれくらいですか?どれくらい?問題を再現する小さな例を提供できませんか? – Bakuriu
あなたのデータはどのように表現されていますか? –
これは5つのフィールドを持つ標準型です。私はCのデータベースクライアントに渡すために文字列に/から変換しています。さらにmallocBytesを使って一度にすべてを割り当てようとしましたが、それほど遅いようです。もう1つのデータポイントは、GHCのプロファイリングでは〜100MBのデータセットに対して〜15GBが割り当てられているということでした。 – ooblahman