2011-10-10 40 views

cevap

42

Kullanarak bloğun kapsamını bıraktığınızda, akış kapatılır ve atılır. Kapat() Flush() işlevini çağırır, bu nedenle el ile aramanız gerekmez.

+0

sonu: Bazı insanlar kendi kullanarak tabloların sonunda Close() diyoruz nasıl benzer -

Ne olursa olsun, bu iyi bir fikir sadece okunabilirlik için yine de çağırmak olabilir? Sadece akımın onu aldığını biliyorum ve her seferinde son olarak yakın metodu diyorum. –

+9

Bu gerekli değildir, Dispose her zaman akışı kapatır ve Close önce akışı temizler. – nos

+1

@FelixCzylwik: Eğer kullanım sonu arayacak olsaydı Kapat, açık akış tonlarca olur ve dışarıda SQLConnections açar ...: D –

0

varsayılan olarak Stream böyle FileStream gibi birkaç istisna dışında Dispose yöntemde Flush() çağırmaz değişir. Bunun nedeni, bazı akış nesnelerinin, arabellek kullanmadıkları için Flush numaralı aramaya gerek duymamalarıdır. Bazıları, MemoryStream gibi, hiçbir işlem yapılmadığından emin olmak için yöntemi geçersiz kılar (bunu op-op yapmak).
Bu, o sırada fazladan aramayı istemediyseniz, kullanmakta olduğunuz Stream alt sınıfının, aramayı Dispose yönteminde uygulayıp uygulamadığını ve gerekip gerekmediğini kontrol etmeniz gerektiği anlamına gelir. kıl payı kullanmanın

using (FileStream fS = new FileStream(params)) 
using (CryptoStream cS = new CryptoStream(params)) 
using (BinaryWriter bW = new BinaryWriter(params)) 
{ 
    doStuff(); 
    //from here it's just readability/assurance that things are properly flushed. 
    bW.Flush(); 
    bW.Close(); 
    cS.Flush(); 
    cS.Close(); 
    fS.Flush(); 
    fS.Close(); 
} 
+1

Yıkama ve kapatma çağrılarını eklemenin okunabilirliği ve sürekliliğe zarar verdiğini iddia ediyorum. Kullanım bildirimi, bir istisnanın atılması durumunda bile nesnenin gerektiği gibi atıldığına dair güvence veren şeydir. – Palec

+0

@Palec Bu pozisyonu anlıyorum, bu, gördüğüm kadarıyla birçok geliştirici arasında bir miktar bölünme standardı. – TheHitchenator

+0

@Palec Ayrıca, yanıtlarımda belirtildiği gibi, varsayılan olarak "Flush()" yöntemini atma yöntemlerinde çağırmayın; yani, o zaman bunu dikkate almayan biri tarafından oluşturulan standart dışı bir akış kullanıyorsanız deyimini kullanarak arabelleği düzgün şekilde temizlemez. Bu nedenle, el ile çalkalamak için iyi bir uygulama olduğunu söyleyebilirim - gerekli değilse bir şey yapmayacak, ancak eğer o zaman tamponların düzgün bir şekilde bertaraf edilmesini sağlayacak. – TheHitchenator