Есть ли более эффективный спулер текста, чем TextWriter/StringBuilder?

Для ситуации, такой как инкрементный захват текста, например, если вы получали все вызовы output.write во время рендеринга страницы, и они добавлялись в текстовый редактор поверх построителя строк.

Есть ли более эффективный способ сделать это? Что-то, что уже есть в dotnet предпочтительно? Особенно, если общий размер превышает сотню тысяч. Может быть, что-то больше похожее на массив страниц, а не на непрерывную память?


person loudej    schedule 17.09.2008    source источник


Ответы (3)


Я думаю, что StringBuilder — самый эффективный способ добавления текста в .net. Чтобы быть более эффективным, вы можете указать начальный размер StringBuilder при его создании.

person sh_kamalh    schedule 17.09.2008

Это зависит от того, что вы делаете с этим текстом.

Если проблема заключается в отслеживании или регистрации, я бы сказал, что лучше всего использовать ETW (отслеживание событий для Windows). Это средство трассировки на уровне ядра, встроенное в Windows, начиная с Windows 2000, и оно намного, намного быстрее, чем файловый ввод-вывод.

Если вы не используете .NET 2.0, вам нужно немного поработать с Win32 API, чтобы использовать его, и вы должны создать класс поставщика, который вы регистрируете в системе. Это немного сложно, но стоит усилий.

Если вы используете .NET 3.5, управляемые классы Etw можно найти в System.Diagnostics.Eventing.

person jonsequitur    schedule 12.11.2008

Это настолько хорошо, насколько это возможно. Вы можете использовать StringWriter, но он все еще пишет в StringBuilder.

person Wolfwyrd    schedule 17.09.2008