2

我有一个构建非常大的字符串的程序。目前我正在使用lazy ByteStrings。以下是总结的问题参数:

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

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

该字符串在构建时不能放入文件中。整个构建操作必须在字符串放入文件之前发生。

我不需要Unicode支持。即使是 7 位 ascii 也可以。我相信这ByteString不会浪费内存来编码 unicode 字符。

我尝试过的事情:

seq在构建 s 时调用ByteString它们。这似乎适用于 50-100k 个字符,但之后效果是一样的。

使用严格ByteString的 s。我不知道如何使用Builder它们,所以我最终使用了列表和concat.

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

4

0 回答 0