Rob*_*Rob 10 .net database-connection connection-pooling
关于在.NET应用程序中管理数据库连接的最佳实践 - 我知道,通常,传递连接对象是不好的.
但是,我有一些特定的好奇心:
1.我有两个业务对象的实例,不同的类,父母 - 孩子关系(孩子是私人的.)以下哪项是最好的?
保持一个私有静态连接打开和共享,由两个对象使用,并保持打开状态直到父级被释放.
保持两个私有静态连接打开,每个对象一个,在处理对象之前不要关闭.
不要保持静态连接; 打开并随后关闭每个需要它的方法的新连接.但是,我的大多数方法只运行1-3个查询,所以这看起来效率低......
我的第二个问题基本上是相同的,但对于一个单一的形式.这里最好的是什么?
在表单的生命周期内保持一个私有静态连接打开并共享.
不要保持静态连接; 打开并随后为需要它的表单中的每个方法关闭一个连接(同样,每个方法只有1-3个查询.)
Kie*_*one 12
(是评论)......
理论上,您不应该从业务逻辑中访问数据库 - 它应该位于单独的数据访问类中.(例如,将来你需要将它们以XML格式离线存储,或者使用Oracle而不是SQL Server ......你不想重写你的业务逻辑!)
您的业务对象不应具有与之关联的数据库连接.应该在某个DAL工厂类型方法中打开连接,检索/构建对象,然后关闭连接并返回对象.
业务对象本身应包含业务逻辑字段和方法,这些字段和方法可能会回调数据访问层,数据访问层应为每个DAL方法创建新的数据库连接.
您可以通过使用连接池来缓解您的低效率恐惧,这意味着如果您打开和关闭连接数百次,则他们可能都会使用相同的连接.但是你根本不应该保持数据库连接 - 尤其不是作为类的成员.
希望有所帮助!
我的理解是,只要需要,连接应该保持开放.大多数时候我在使用语句中看到了连接,类似于
using (DBConnection db = new DBConnection(connectString))
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
此链接可能会有所帮助:使用ADO.NET的最佳实践
这是一个有趣的摘录.
为获得最佳性能,请仅在需要时保持与数据库的连接.此外,减少打开和关闭多个操作的连接的次数.
我一直遵循在使用块中打开连接的做法,因此总是调用Dispose方法(因此也就是Close方法)而不用担心它.使用这种方法,我从来没有遇到过这样的情况:性能不佳与过多的并发连接或过度的设置或拆除操作有关.
在回答这两个问题时,如果您使用的是具有连接池的东西,例如ADO.NET,您应该编写查询代码以尽可能缩短连接.即open and subsequently close a new connection for every method that requires it..当您关闭连接时,它将返回到连接池并在后续查询中重用,因此您不会因打开和关闭一堆连接而导致性能下降.优点是您不会冒泄漏您忘记关闭的连接的风险,从长远来看,与长时间保持连接打开相比,您打开的同时连接数会更少.应用程序是Windows窗体而不是Web窗体并不重要:保持连接尽可能短.