Am citit câteva postări de blog online despre salvarea Stream într-un fișier,Multe sunt greșite。 (Am găsit mai multe probleme: performanță slabă, anormal când fluxul este prea mare)
După ce primești un stream, cum să salvezi elegant acest stream în cod
Cea mai elegantă metodă ar trebui să fie prin metoda CopyTo sau CopyToAsync
aici inputStream.Seek(0, SeekOrigin.Start); Nu neapărat, te rog să folosești acest cod în funcție de nevoile tale, cum ar fi să copiezi fluxul doar de pe octetul 10, etc
Folosirea abordării asincrone va dura puțin mai mult pentru această scriere, dar va oferi performanța generală mai bună și va permite procesorului să gestioneze alte sarcini
Rețineți că atunci când folosiți CopyToAsync, amintiți-vă să adăugați await; la executarea acestui cod, veți transfera execuția către IO, majoritatea procesărilor IO nu necesită CPU pentru a calcula, astfel încât performanța generală să fie mai bună
De asemenea, dacă iputStream-ul vine din exterior, atunci nu recomand să-l eliberezi în această metodă, de ce? Am folosit un pârâu bun și a fost omorât când am depășit într-o afacere
A doua metodă este să controlezi singur cache-ul de replicare a memoriei, care va avea o copie suplimentară de memorie
Ceea ce face această metodă este să îți permită să modifici valoarea noului octet[1024], oferindu-ți control asupra cache-ului copiat
Următoarele sunt câteva metode care nu sunt recomandate, dar care sunt convenabile când scrii
Metoda de mai sus va copia memoria de două ori, iar dacă lungimea resursei de intrare este 1G, va ocupa 2G de resurse
Similar cu cele de mai sus este solicitarea unui cache mare, așa cum este arătat în codul următor
Din punct de vedere al eficienței și eleganței codului, ele sunt de fapt inferioare metodei CopyTo și din cauza fluxului. Lungimea ca lungime nu determină cache-ul, deci nu este la fel de bună ca a doua metodă
Mai jos este o metodă foarte lentă, scrierea un octet cu octet este foarte lentă
Transferat din:Autentificarea cu hyperlink este vizibilă. (Sfârșit)
|