Stream'i bir dosyaya kaydetme hakkındaki bazı blog yazılarına baktım,Birçoğu yanlış。 (Birkaç sorun buldum: düşük performans, akış çok büyük olduğunda anormal)
Bir Stream aldıktan sonra bu Stream'i kod olarak nasıl zarifçe kaydedilir?
En şık yöntem CopyTo veya CopyToAsync yöntemi olmalıdır
burada inputStream.Seek(0, SeekOrigin.Begin); Mutlaka değil, lütfen bu kodu kendi ihtiyaçlarınıza göre kullanın, örneğin akışı sadece 10. bayttan kopyalamanız gerekiyor vb
Asenkron yaklaşım kullanmak bu yazma için biraz daha uzun sürecek, ancak genel performansı daha iyi hale getirecek ve CPU'nun diğer görevleri üstlenebilmesi için
CopyToAsync kullanırken beklemeyi eklemeyi unutmayın, bu kodu çalıştırırken çalıştırmayı IO'ya teslim edeceksiniz, çoğu IO işleme işlemcisi CPU gerektirmez, böylece genel performans daha iyi olur
Ayrıca, iputStream dışarıdan geliyorsa, bu yöntemin içinde salmanızı önermem, neden? İyi bir akış kullandım ve bir işletmede geçtiğimde o dere öldü
İkinci yöntem, bellek çoğaltma önbelleğini kendiniz kontrol etmektir; bu da ek bir bellek kopyasına sahip olur
Bu yöntemin teması, yeni bayt[1024] değerini değiştirmenize olanak tanır ve kopyalanan önbellek üzerinde kontrol sağlar
Sonraki yöntemler önerilmeyenler ama yazarken kullanışlıdır
Yukarıdaki yöntem belleği iki kez kopyalayacak ve giriş kaynak uzunluğu 1G ise, 2G kaynak kaplar
Yukarıdaki gibi, aşağıdaki kodda gösterildiği gibi büyük bir önbellek talep etmek de vardır
Verimlilik ve kod zarafeti açısından, aslında CopyTo yönteminden ve akış nedeniyle daha geridirler. Uzunluk olarak uzunluk önbelleği belirlemez, bu yüzden ikinci yöntem kadar iyi değildir
Aşağıda çok yavaş bir yöntem var, bir bayt bir bayt yazmak çok yavaş
Transfer edilenler:Bağlantı girişi görünür. (Son)
|