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