构建和打印非常大的字符串的最有效方法

时间:2013-10-13 04:28:41

标签: string haskell

我有一个构造非常大的字符串的程序。目前我正在使用懒惰的ByteString。以下是汇总的问题参数:

当前的实现最多可以处理大约500k个字符,之后就会耗尽内存(~600MB)。我希望这个(字符数量)在50MB以下运行。

构建时不访问该字符串。这可能会导致许多thunk,从而导致内存问题。我使用Builder来制作ByteString,但似乎没有Builder的严格版本(或者至少我找不到它)。

构建时无法将字符串放入文件中。整个构建操作必须在将字符串放入文件之前进行。

我不需要unicode支持。甚至7位ascii都可以。我相信ByteString不会浪费内存来编码unicode字符。

我尝试过的事情:

正在构建seq时调用ByteString。这似乎适用于50-100k字符,但之后效果是相同的。

使用严格ByteString s。我无法弄清楚如何使用Builder,因此我最终使用了列表和concat

使用UArray Int Char。这意味着要么事先知道字符串的大小,要么分配整个数组,要么拥有大量的中间数据结构。

0 个答案:

没有答案