Tittade på några blogginlägg online om att spara Stream till en fil,Många är felaktiga。 (Jag hittade flera problem: dålig prestanda, onormalt när strålen är för stor)
Efter att ha fått en stream, hur sparar man denna stream elegant till kod
Den mest eleganta metoden bör vara genom metoden CopyTo eller CopyToAsync
här inputStream.Seek(0, SeekOrigin.Begin); Inte nödvändigtvis, använd denna kod enligt dina egna behov, till exempel att du bara behöver kopiera strömmen från den tionde bytet, etc
Att använda det asynkrona tillvägagångssättet tar lite längre tid för denna skrivning, men det ger den övergripande prestandan bättre och tillåter CPU:n att hantera andra uppgifter
Observera att när du använder CopyToAsync, kom ihåg att lägga till 'wait', när du kör denna kod överlämnar du exekveringen till IO, de flesta IO-processer kräver ingen CPU för att beräknas, vilket gör att den totala prestandan kan bli bättre
Om iputStream kommer in utifrån, rekommenderar jag inte att släppa ut den på den här sättet, varför? Jag använde en bra bäck och den försvann när jag gick bort i ett företag
Den andra metoden är att själv styra minnesreplikeringscachen, som kommer att ha en extra minneskopia
Vad denna metod gör är att du kan ändra värdet på den nya byte[1024], vilket ger dig kontroll över den kopierade cachen
Nästa är några metoder som inte rekommenderas, men de är praktiska när man skriver
Metoden ovan kopierar minnet två gånger, och om indataresursens längd är 1G kommer det att uppta 2G resurser
Liknande ovanstående är det att begära en stor cache, som visas i följande kod
När det gäller effektivitet och kodens elegans är de faktiskt sämre än CopyTo-metoden, och på grund av ström. Längd som längd avgör inte cachen, så den är inte lika bra som den andra metoden
Nedan är en superlångsam metod, en byte gånger en byte skrivande är superlångsamt
Överförd från:Inloggningen med hyperlänken är synlig. (Slut)
|