Переглянув кілька блогів онлайн про збереження Stream у файл,Багато з них помиляються。 (Я знайшов кілька проблем: погана продуктивність, аномальність, коли потік занадто великий)
Після отримання потоку як елегантно зберегти цей стрім у код
Найелегантнішим методом має бути метод CopyTo або CopyToAsync
тут inputStream.Seek(0, SeekOrigin.Begin); Не обов'язково, будь ласка, використовуйте цей код відповідно до своїх потреб, наприклад, потрібно скопіювати потік лише з 10-го байта тощо
Використання асинхронного підходу займе трохи більше часу для цього запису, але це покращить загальну продуктивність і дозволить процесору виконувати інші завдання
Зверніть увагу, що при використанні CopyToAsync пам'ятайте про очікування: під час виконання цього коду ви передаєте виконання IO, більшість обробки IO не потребує процесора для обчислення, щоб загальна продуктивність була кращою
Також, якщо iputStream надходить ззовні, то я не рекомендую випускати його всередині цього способу, чому? Я користувався хорошим струмком, і він загинув, коли я проходив у бізнесі
Другий метод — керувати кешом реплікації пам'яті самостійно, який матиме додаткову копію пам'яті
Цей метод дозволяє змінювати значення нового байта[1024], даючи контроль над скопійованим кешом
Далі — деякі методи, які не рекомендуються, але вони зручні при написанні
Вищенаведений метод копіює пам'ять двічі, і якщо довжина вхідного ресурсу становить 1G, він займатиме 2G ресурсів
Подібно до наведеного вище — це запит на великий кеш, як показано в наступному коді
З точки зору ефективності та елегантності коду вони фактично поступаються методу CopyTo, а також через поток. Довжина як довжина не визначає кеш, тому він не такий ефективний, як другий метод
Нижче наведено дуже повільний метод: запис на один байт на один байт дуже повільний
Переведено з:Вхід за гіперпосиланням видно. (Кінець)
|