Pogledal sem nekaj blogov na spletu o shranjevanju Streama v datoteko,Veliko jih je napačnih。 (Ugotovil sem več težav: slaba zmogljivost, nenormalno, ko je tok prevelik)
Ko dobite Stream, kako elegantno shraniti ta Stream v kodo
Najbolj elegantna metoda naj bi bila metoda CopyTo ali CopyToAsync
tukaj inputStream.Seek(0, SeekOrigin.Begin); Ni nujno, prosim, uporabite to kodo glede na svoje potrebe, na primer kopirajte tok le iz 10. bajta itd
Uporaba asinhronega pristopa bo za ta zapis trajala nekoliko dlje, vendar bo izboljšala splošno zmogljivost in CPU-ju omogočila opravljanje drugih nalog
Upoštevajte, da pri uporabi CopyToAsync ne pozabite dodati čakanja; pri izvajanju te kode boste izvajanje predali IO, večina obdelave IO ne zahteva procesorja za izračun, zato je lahko splošna zmogljivost boljša
Prav tako, če iputStream prihaja od zunaj, potem ne priporočam sproščanja znotraj te metode, zakaj? Uporabil sem dober potok, ki je bil ukinjen, ko sem šel mimo v podjetju
Druga metoda je, da sami nadzorujete predpomnilnik za replikacijo pomnilnika, ki bo imel dodatno kopijo pomnilnika
Ta metoda omogoča spreminjanje vrednosti novega bajta[1024], kar vam daje nadzor nad kopiranim predpomnilnikom
Naslednje so nekatere metode, ki niso priporočljive, a so priročne pri pisanju
Zgornja metoda bo pomnilnik kopirala dvakrat, in če je dolžina vhodnega vira 1G, bo zasedel 2G virov
Podobno kot zgoraj je zahteva velik predpomnilnik, kot je prikazano v naslednji kodi
Kar zadeva učinkovitost in eleganco kode, so dejansko slabše od metode CopyTo in to zaradi pretoka. Dolžina kot dolžina ne določa predpomnilnika, zato ni tako dobra kot druga metoda
Spodaj je zelo počasna metoda, pisanje en bajt za enim bajtom je zelo počasno
Preneseno iz:Prijava do hiperpovezave je vidna. (Konec)
|