适当地重用SqlConnection以提高页面性能

3
我会尽可能简单地描述它。我们有一个SqlConnection和3个方法。 第一种类型 这种类型打开一个单独的SqlConnection,方法具有SqlConnection属性。基本上它们只使用sConnection,在方法内部创建、使用、关闭SqlCommand和SqlDataReader。
using (SqlConnection sConnection = new SqlConnection(string))
{
    sConnection.Open();

    Method objMethod = new Method();
    objMethod.SqlConnection = sConnection;
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.SqlConnection = sConnection;
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.SqlConnection = sConnection;
    objMethod3.DoSomething();
}

第二种类型

这种类型将在每个方法内单独创建新的SqlConnection、SqlCommand和SqlDataReader。对于3个方法,它将不得不打开和关闭3个SqlConnection。

    Method objMethod = new Method();
    objMethod.DoSomething();

    Method2 objMethod = new Method2();
    objMethod2.DoSomething();

    Method3 objMethod = new Method3();
    objMethod3.DoSomething();

问题是是否将SqlConnection封装在方法内部,或者是否安全地创建一个SqlConnection并在方法中使用已打开的连接而无需打开新连接。谢谢。
2个回答

2

Sql连接被池化,因此如果您关心性能,两种方法都只会使用一个连接,因此使用第二种方法的惩罚是可以忽略不计的。

另一方面,第二种方法展示了更好的封装和关注点分离。我会选择第二个选项。


1

SqlConnections 被池化了。对于 Sql Server,最好打开、使用和关闭连接(使用块可以扩展到调用 Dispose 的 finally 语句块,从而关闭连接)。

事实上,保持连接处于打开状态并握住它实际上会损害性能,因为这样您就会破坏池化行为,并在不需要时导致其他线程/请求不必要地向池中添加另一个连接。

让连接池发挥其作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接