Эффективная замена строк в потоке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

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