Ingat semua ini dalam konteks ekosistem .Net.
Pengembang terkadang ingin "mengoptimalkan" kode mereka untuk menggunakan kembali objek koneksi mereka. Mengingat konteks pertanyaan ini, ini hampir selalu merupakan kesalahan.
ADO.Net memiliki fitur yang disebut Connection Pooling . Saat Anda membuat dan membuka objek koneksi baru, yang sebenarnya Anda lakukan adalah meminta koneksi dari kumpulan. Ketika Anda menutup koneksi, Anda mengembalikannya ke kolam.
Sangat penting untuk memahami objek yang kita gunakan langsung dalam kode: SqlConnection, MySqlConnection, OleDbConnectio, dll, semua hanya pembungkus di sekitar koneksi yang sebenarnya yang dikelola oleh ADO.Net, dan koneksi nyata ADO.Net jauh "lebih berat" dan lebih mahal dari sudut pandang kinerja. Ini objek yang mendasari yang memiliki kekhawatiran seperti otentikasi, transit jaringan, enkripsi, dan hal-hal itu jauh melebihi jumlah kecil memori dalam objek yang sebenarnya Anda lihat dalam kode Anda sendiri.
Ketika Anda mencoba menggunakan kembali objek koneksi Anda, Anda merusak kemampuan ADO.Net untuk secara efektif mengelola koneksi penting yang mendasarinya. Anda mendapatkan efisiensi dalam hal kecil dengan mengorbankan hal yang jauh lebih besar.
Menggunakan kembali koneksi di suatu aplikasi atau permintaan http juga dapat memaksa Anda untuk membuat serialisasi sesuatu yang mungkin dapat berjalan secara paralel, dan menjadi hambatan kinerja. Saya telah melihat ini terjadi dalam aplikasi nyata.
Dalam kasus contoh halaman web di sini, di mana Anda setidaknya hanya menyimpan koneksi kecil selama satu permintaan / respons http, Anda bisa mendapatkan efisiensi lebih dengan mengevaluasi pertanyaan apa yang Anda jalankan dalam pipa permintaan Anda, dan mencoba mendapatkan turun menjadi beberapa permintaan terpisah ke basis data sebanyak mungkin (petunjuk: Anda dapat mengirimkan lebih dari satu permintaan dalam satu string SQL, dan menggunakan DataReader.NextResult()
atau memeriksa tabel yang berbeda DataSet
untuk berpindah di antara mereka).
Dengan kata lain, alih-alih berpikir untuk menggunakan kembali satu koneksi untuk aplikasi atau permintaan http vs satu koneksi per permintaan, pikirkan dalam hal satu koneksi untuk setiap kali Anda memanggil ke database ... setiap perjalanan pulang pergi. Kemudian cobalah untuk meminimalkan jumlah koneksi dengan meminimalkan jumlah perjalanan tersebut. Dengan cara ini Anda dapat memenuhi kedua tujuan.
Tapi itu hanya satu jenis optimasi. Ada juga mengoptimalkan waktu programmer, dan mendapatkan penggunaan kembali kode yang efektif. Pengembang tidak ingin menulis kode boilerplate yang sama berulang-ulang hanya untuk mendapatkan objek koneksi yang terbuka dan siap digunakan. Ini tidak hanya membosankan, ini adalah cara untuk memperkenalkan bug ke dalam program.
Namun, bahkan di sini, umumnya lebih baik memiliki satu koneksi per kueri (atau pulang pergi). Ada pola lain yang dapat Anda gunakan untuk membantu menghindari penulisan ulang kode boilerplate yang sama. Ini adalah salah satu contoh yang saya sukai, tetapi ada banyak contoh lainnya.