Эффективная замена строк в потокеC#

Место общения программистов C#
Ответить
Anonymous
 Эффективная замена строк в потоке

Сообщение Anonymous »

Мне нужно заменить строку в ответе потоковой передачи HTTP. Наивный способ сделать это:

Код: Выделить всё

using var reader = new StreamReader(input, leaveOpen: true);
var original = await reader.ReadToEndAsync();
var replaced = original.Replace(old, new, StringComparison.InvariantCultureIgnoreCase);
await output.WriteAsync(Encoding.UTF8.GetBytes(replaced));
Это требует очень много ресурсов и памяти, поскольку перед заменой строк необходимо считать полный ответ в память.
Я смотрел System .IO.Pipelines и PipeReader. Хотя это дает мне эффективный доступ к потоку, он работает с байтами, что делает проблематичным преобразование в char при работе в Utf-8.
Один метод, который я видел заключается в использовании ReadLineAsync в потоке чтения, но я не знаю, будет ли поток содержать какие-либо символы новой строки.
Другой метод, который я видел, — это использование очереди, но даже это кажется неуклюжим.
Итак, мой вопрос: как лучше всего заменить текст потоком без чтения всего потока в памяти?

Подробнее здесь: https://stackoverflow.com/questions/782 ... n-a-stream
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»