2

非常に大きな文字列を作成するプログラムがあります。現在、私はレイジーを使用していByteStringます。問題のパラメーターを以下にまとめます。

現在の実装では、約 50 万文字まで動作し、後で単純にメモリ不足になります (~600MB)。これ (文字数) を 50MB 未満で実行したいと考えています。

構築中は文字列にアクセスしません。これにより、多くのサンクが発生し、メモリの問題が発生する可能性があります。私はsBuilderを作成するために使用していByteStringますが、厳密なバージョンはないようですBuilder(または、少なくとも見つけることができません)。

ビルド中に文字列をファイルに入れることはできません。文字列をファイルに配置する前に、ビルド操作全体を実行する必要があります。

ユニコードのサポートは必要ありません。7 ビットの ascii でも構いません。ByteStringただし、ユニコード文字をエンコードするためにメモリを無駄にしないと思います。

私が試したこと:

構築中の をseq呼び出します。ByteStringこれは 50 ~ 100k 文字で機能するようですが、その後の効果は同じです。

厳密なByteStrings の使用。使い方がわからなかったBuilderので、リストとconcat.

を使用しUArray Int Charます。これは、文字列のサイズを事前に把握して配列全体を割り当てるか、大量の中間データ構造を持つことを意味します。

4

0 に答える 0