Existe um spooler de texto mais eficiente que TextWriter/StringBuilder
-
09-06-2019 - |
Pergunta
Para uma situação como capturar texto de forma incremental, por exemplo, se você estivesse recebendo todas as chamadas output.write quando uma página estava sendo renderizada e elas estivessem sendo anexadas a um textwriter por meio de um stringbuilder.
Existe uma maneira mais eficiente de fazer isso?Algo que já existe em dotnet de preferência?Principalmente se houver um tamanho total superior a cem mil.Talvez algo mais parecido com uma série de páginas em vez de memória contígua?
Solução
Acho que StringBuilder é a maneira mais eficiente de acrescentar texto em .net.Para ser mais eficiente, você pode especificar o tamanho inicial do StringBuilder ao criá-lo.
Outras dicas
Depende do que você está fazendo com esse texto.
Se a preocupação for rastreamento ou registro em log, eu diria que sua melhor aposta é usar ETW (Event Tracing for Windows).É um recurso de rastreamento em nível de kernel integrado ao Windows desde o Windows 2000 e é muito, muito mais rápido do que fazer E/S de arquivos.
Se você não estiver usando o .NET 2.0, será necessário fazer um pouco de trabalho na API win32 para usá-lo e criar uma classe de provedor que você registrará no sistema.É um pouco complicado, mas vale o esforço.
Se você estiver usando o .NET 3.5, as classes Etw gerenciadas poderão ser encontradas em System.Diagnostics.Eventing.
Isso é o melhor que pode acontecer.Você pode usar um StringWriter, mas ele ainda está gravando em um StringBuilder