Посмотрел несколько блог-постов в интернете о сохранении Stream в файл,Многие ошибочны。 (Я обнаружил несколько проблем: плохая производительность, ненормальные моменты, когда поток слишком большой)
После того как я получил Stream, как элегантно сохранить этот поток в код
Самый элегантный способ должен быть с помощью CopyTo или CopyToAsync
здесь inputStream.Seek(0, SeekOrigin.Begin); Не обязательно, пожалуйста, используйте этот код в соответствии с вашими потребностями, например, нужно скопировать поток только с 10-го байта и так далее
Использование асинхронного подхода займёт немного больше времени для такой записи, но это улучшит общую производительность и позволит процессору выполнять другие задачи
Обратите внимание, что при использовании CopyToAsync не забывайте добавлять await, при выполнении этого кода вы передаёте выполнение в IO, большинство процессов ввода не требует вычислений процессором, что повышает общую производительность
Также, если iputStream поступает снаружи, то я не рекомендую выпускать его таким способом, почему? Я пользовался хорошим стримом, и он был убит, когда я прошёл мимо в бизнесе
Второй способ — самостоятельно управлять кэшем репликации памяти, который будет иметь дополнительную копию памяти
Этот метод позволяет изменить значение нового байта[1024], давая контроль над скопированным кэшем
Далее — некоторые методы, которые не рекомендуются, но они удобны при написании
Вышеуказанный метод скопирует память дважды, и если длина входного ресурса равна 1G, он займёт 2G ресурсов
Аналогично вышеуказанному — запрос большого кэша, как показано в следующем коде
По эффективности и элегантности кода они на самом деле уступают методу CopyTo и из-за потока. Длина как длина не определяет кэш, поэтому он хуже второго метода
Ниже приведён очень медленный метод: запись в один байт на байт очень медленная
Переведён из:Вход по гиперссылке виден. (Конец)
|