Vaatasin mõningaid blogipostitusi internetis, kus räägiti Streami salvestamisest faili,Paljud neist on valed。 (Leidsin mitmeid probleeme: kehv jõudlus, ebatavaline, kui voog on liiga suur)
Pärast Streami saamist kuidas seda voogu elegantselt koodi salvestada
Kõige elegantsem meetod peaks olema CopyTo või CopyToAsync meetod
siin inputStream.Seek(0, SeekOrigin.Begin); Mitte tingimata, palun kasuta seda koodi vastavalt oma vajadustele, näiteks pead kopeerima voogu ainult 10. baidilt jne
Asünkroonse lähenemise kasutamine võtab selle kirjutamise jaoks veidi kauem aega, kuid annab üldise jõudluse paremaks ja võimaldab protsessoril täita muid ülesandeid
Pane tähele, et kui kasutad CopyToAsync'i, pea meeles lisada await; selle koodi käivitamisel antakse täitmine IO-le, enamik IO töötlemisest ei vaja arvutamiseks CPU-d, seega on üldine jõudlus parem
Kui iputStream tuleb väljastpoolt, siis ma ei soovita seda selle meetodi sees vabastada, miks? Kasutasin head voogu ja see kadus, kui ma ettevõttes läbi läksin
Teine meetod on ise mälureplikatsiooni vahemälu juhtimine, millel on lisamälu koopia
See meetod võimaldab muuta uue baidi väärtust[1024], andes kontrolli kopeeritud vahemälu üle
Järgmised on mõned meetodid, mida ei soovitata, kuid mis on kirjutamisel mugavad
Ülaltoodud meetod kopeerib mälu kaks korda ning kui sisendressursi pikkus on 1G, võtab see 2G ressursse
Sarnane eeltoodule on ka suure vahemälu taotlemine, nagu järgmises koodis näidatud
Tõhususe ja koodi elegantsi poolest on need tegelikult CopyTo meetodist kehvemad ning ka voogude tõttu. Pikkus kui pikkus ei määra vahemälu, seega pole see nii hea kui teine meetod
Allpool on väga aeglane meetod, üks bait ühe baidi kaupa kirjutamine on väga aeglane
Üleviidud:Hüperlingi sisselogimine on nähtav. (Lõpp)
|