Как правильно создать буфер для хранения ByteStrings в Haskell? - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь создать буфер в памяти, который я могу использовать для отправки ByteString s с сервера клиенту через сокет. Я хочу, чтобы он был изменяемым, поэтому я могу использовать его снова.

Причина, по которой я хочу это сделать, заключается в том, что отправка отложенных ByteString s напрямую приводит к созданию большого количества объектов для каждого ответа сервера и замедляет работу сервера из-за чрезмерного сбора мусора (40% затрачивается в GC). *

Я искал IOUArray, но это будет работать только для Int, Word32 и тому подобное, но не для ByteString.

Другой вариант, который я рассматриваю, заключается в создании Array Int (IORef ByteString) - каждая строка ByteString должна иметь одинаковый размер, но я не уверен, что это правильный путь.

Я просмотрел множество документов в Интернете, но они либо адресованы IOArray или IORef, но никогда не были массивом ByteStrings.

Я очень ценю любые указания, как это сделать или где искать дополнительную информацию.

1 Ответ

3 голосов
/ 09 марта 2012

Возможно, вам понравится пакет blaze-builder .

...