2013-06-18 35 views
7

Ben System.Data.SQLite içinde SQLiteConnection nesne iki benzer yöntemler sahip olduğunu fark ettim.Bağlantı.Close() ve connection.Dispose() arasındaki fark nedir? <code>SQLiteDataReader</code> nesne için</p> <ul> <li><code>Close()</code></li> <li><code>Dispose()</code></li> </ul> <p>aynı:

fark nedir?

+3

Belki de bu yardımcı olur: http://stackoverflow.com/questions/61092/close-and-dispose-which-to-call – Micha

+0

Teşekkür ederim, ben bu yazı görmedim! – Epoc

cevap

17

Dispose ayrıca kapatılmadıysa bağlantıyı kapatır, ancak Close numaralı telefonu ararken bağlantıyı tekrar açabilirsiniz. Bağlantı bertaraf edildiğinde bu mümkün değildir. Genelde

, Close diyoruz ama sadece bir using bloğunda bir bağlantının oluşturulmasını sararak örtük imha demiyorlar:

using (var connection = new SqlConnection(...)) 
{ 
    // use connection here. 
} // connection gets closed and disposed here. 
+0

[kaynağı] bir göz (http://system.data.sqlite.org/index.html/artifact/31b823606b81d72d120bdd8dca8de8421b9abb16) ... 'Dispose()' 'Yakın()' içten çağırır gösterebilir almak. – Arran

+0

Yanıt için teşekkürler (yinelenen için özür dilerim) – Epoc

+0

@Steven mi dedim? – Arran

5

Connection.Close() basitçe sunucusuna bağlantıyı kapanacak bağlantı dizesinde tanımlandığı gibi. Bağlantı bu noktadan sonra kullanılabilir/yeniden açılır.

Connection.Dispose() tekrar kullanılmasını o Connection engelleyen tüm yönetilmeyen kaynakları kaldırarak, tamamen temizler. Elden çıkarıldıktan sonra, nesneyi artık kullanmaya çalışmamalısınız. Dispose(), içinde Close() `de kesinlikle aranacaktır.

İşlerin doğru temizlenir emin olmak için, bu nedenle mümkünse gibi using kullanarak sözdizimi öneriyoruz:

using(SqlLiteConnection conn = new SqlLiteConnection(...)) 
{ 
    // Do work here 
} 

Bu bağımsız olarak otomatik bir istisna atılan, sizin için bağlantı kurtulacağız.

+2

Tek bir fark "Kapat" bu bağlantıda 'GC.SuppressFinalize' yöntemini çağırmaz, 'Dispose' bu yöntemi çağırır. Bir bağlantıyı atmamak, bağlantı nesnesini daha uzun süre canlı tutacaktır. Bunun bağlantı havuzu üzerinde bir etkisi yoktur, ancak belleğe sahiptir. Bununla birlikte, bir 'SqlConnection' - farklılığı ihmal edilebilir. – Steven

+0

Teşekkürler, şimdi benim için daha net (çift için özür dilerim) – Epoc

İlgili konular