我有一个构造非常大的字符串的程序。目前我正在使用懒惰的ByteString
。以下是汇总的问题参数:
当前的实现最多可以处理大约500k个字符,之后就会耗尽内存(~600MB)。我希望这个(字符数量)在50MB以下运行。
构建时不访问该字符串。这可能会导致许多thunk,从而导致内存问题。我使用Builder
来制作ByteString
,但似乎没有Builder
的严格版本(或者至少我找不到它)。
构建时无法将字符串放入文件中。整个构建操作必须在将字符串放入文件之前进行。
我不需要unicode支持。甚至7位ascii都可以。我相信ByteString
不会浪费内存来编码unicode字符。
我尝试过的事情:
正在构建seq
时调用ByteString
。这似乎适用于50-100k字符,但之后效果是相同的。
使用严格ByteString
s。我无法弄清楚如何使用Builder
,因此我最终使用了列表和concat
。
使用UArray Int Char
。这意味着要么事先知道字符串的大小,要么分配整个数组,要么拥有大量的中间数据结构。