Pažvelgė į kai kuriuos dienoraščio pranešimus internete apie įrašymo srautą į failą,Daugelis yra neteisingi。 (Radau keletą problemų: prastas našumas, nenormalus, kai srautas yra per didelis)
Gavus srautą, kaip elegantiškai išsaugoti šį srautą į kodą
Elegantiškiausias metodas turėtų būti "CopyTo" arba "CopyToAsync" metodas
čia inputStream.Seek(0, SeekOrigin.Begin); Nebūtinai, naudokite šį kodą pagal savo poreikius, pvz., jums reikia nukopijuoti srautą tik iš 10-ojo baito ir pan
Naudojant asinchroninį metodą užtruks šiek tiek ilgiau, tačiau tai suteiks bendrą našumą geriau ir leis procesoriui atlikti kitas užduotis
Atminkite, kad naudodami "CopyToAsync" nepamirškite pridėti palaukti, vykdydami šį kodą, vykdymą perduosite IO, daugumai IO apdorojimo nereikia procesoriaus apskaičiuoti, todėl bendras našumas gali būti geresnis
Be to, jei iputStream ateina iš išorės, tada aš nerekomenduoju išleisti jį viduje šį metodą, kodėl? Aš naudojau gerą upelį ir jis buvo nužudytas, kai aš praėjo į verslą
Antrasis būdas yra patiems valdyti atminties replikacijos talpyklą, kuri turės papildomą atminties kopiją
Šis metodas leidžia modifikuoti naujo baito reikšmę[1024], suteikiant jums galimybę valdyti nukopijuotą talpyklą
Kiti yra keletas metodų, kurie nerekomenduojami, tačiau jie yra patogūs rašant
Aukščiau pateiktas metodas nukopijuos atmintį du kartus, o jei įvesties išteklių ilgis yra 1G, jis užims 2G išteklių
Panašiai kaip aukščiau, reikia prašyti didelės talpyklos, kaip parodyta šiame kode
Kalbant apie efektyvumą ir kodo eleganciją, jie iš tikrųjų yra prastesni už CopyTo metodą ir dėl srauto. Ilgis kaip ilgis nelemia talpyklos, todėl jis nėra toks geras kaip antrasis metodas
Žemiau yra labai lėtas metodas, vienas baitas po vieną baitą rašymas yra labai lėtas
Perkelta iš:Hipersaito prisijungimas matomas. (Pabaiga)
|