Bütün bunların .Net ekosistemi bağlamında olduğunu unutmayın.
Geliştiriciler bazen bağlantı nesnelerini yeniden kullanmak için kodlarını "optimize etmek" ister. Bu sorunun bağlamı göz önüne alındığında, bu neredeyse her zaman bir hatadır.
ADO.Net, Bağlantı Havuzu Oluşturma adlı bir özelliğe sahiptir . Yeni bir bağlantı nesnesi oluşturup açtığınızda, gerçekte yaptığınız şey bir havuzdan bağlantı istemektir. Bir bağlantıyı kapattığınızda, onu havuza döndürürsünüz.
Bu, koda doğrudan kullanmak nesneleri anlamak önemlidir: SqlConnection, MySqlConnection, OleDbConnectio, vs, hepsi sadece vardır sarmalayıcıların ADO.Net tarafından yönetilen gerçek altta yatan bir bağlantı etrafında ve ADO.Net gerçek bağlantıları "ağır" çok ve daha pahalı performans açısından. Kimlik doğrulaması, ağa geçiş, şifreleme gibi endişeleri olan temel nesneler ve aslında kendi kodunuzda gördüğünüz nesnedeki küçük bellek miktarından daha ağır olan şeyler.
Bağlantı nesnesini yeniden kullanmaya çalıştığınızda, ADO.Net'in önemli altta yatan bağlantıları etkili bir şekilde yönetme özelliğini ortadan kaldırırsınız. Çok daha büyük bir şeyin pahasına küçük şeyde verimlilik elde edersiniz.
Bir uygulamayı veya http isteğinde bağlantıyı yeniden kullanmak, sizi paralel olarak çalışabilecek bir şeyi yanlışlıkla seri hale getirmeye ve performans darboğazı haline getirmeye zorlayabilir. Bunun gerçek uygulamalarda olduğunu gördüm.
Buradaki web sayfası örneğinde, en azından yalnızca tek bir http isteği / yanıtı süresi için küçük bağlantıyı sürdürdüğünüzde, istek hattınızda hangi sorguları çalıştırdığınızı değerlendirerek daha fazla verimlilik elde edebilir ve Bunları mümkün olduğu kadar az sayıda ayrı veri tabanına isteyin (ipucu: tek bir SQL dizesinde birden fazla sorgu gönderebilir ve aralarında hareket DataReader.NextResult()
etmek için farklı tabloları kullanabilir veya kontrol DataSet
edebilirsiniz).
Başka bir deyişle, bir uygulama için bir bağlantıyı veya sorgu başına bir bağlantıyı http isteği yeniden kullanma anlamındansa, veritabanına çağırdığınız her sefer için bir bağlantı anlamında düşünün ... her turda. Sonra bu yolculukların sayısını en aza indirerek bağlantı sayısını en aza indirmeye çalışın. Bu şekilde her iki hedefi de yerine getirebilirsiniz.
Ama bu sadece bir çeşit optimizasyon. Ayrıca programcı zamanını optimize etmek ve etkili kod yeniden kullanımı kazanmak da var. Geliştiriciler, yalnızca açık ve kullanıma hazır bir bağlantı nesnesi elde etmek için aynı kazan kodunu tekrar tekrar yazmak istemiyorlar. Sadece sıkıcı değil aynı zamanda hataları programa sokmanın bir yolu.
Burada bile olsa, genellikle sorgu başına (veya gidiş dönüş) bir bağlantı olması daha iyidir. Aynı kazan kodunu yeniden yazmamak için kullanabileceğiniz başka desenler de var. İşte sevdiğim bir örnek , ancak daha birçok var.