gpt4 book ai didi

c# - SqlConnection、连接池和工作单元的设计模式

转载 作者:行者123 更新时间:2023-11-30 14:16:07 25 4
gpt4 key购买 nike

很明显,SqlConnections 是池化的,所以 using 关键字看起来很完美,这是我一直使用并看到使用的方法。

例如……

public List<string> MyQuery()
{
List<string> list = new List<string>();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
// do some stuff with connection, process the resultset and fill the list.
}
return list;
}

问题是:对于一个网页有多个查询,是每次都创建连接还是共享查询之间的连接,为一个工作单元共享它更好?

性能会更好还是只是过早的不必要的微优化?

尽快关闭每个连接真的很重要,还是尝试将所有查询打包到一个工作单元中更好?

一个工作单元的例子可以是...

List<string> list1, list2;
string myvalue1, string myvalue2;

using (SqlConnection conn = new SqlConnection(connection))
{
list1 = MyQuery1(conn);
list2 = MyQuery2(conn);
myvalue1 = MyQuery3(conn);
myvalue2 = MyQuery4(conn);
}

这可能发生在应该从数据库中获取多个数据的页面加载期间。

最佳答案

请注意,使用连接池时,您实际上并没有为每个"new"创建新连接……您通常只是从池中取回一个连接。

因此,您应该始终尽可能晚地打开连接,并尽可能早地关闭它们。

如果一组命令需要成为一个事务的一部分,则需要一起完成。但除此之外,我认为您应该始终在完成后关闭,并获得一个新的。

即使您没有在这些命令之间运行其他代码...如果在它们之间发生线程上下文切换怎么办?您的连接对象不必要地打开,什么也不做,等待取回控制权。

如果您关闭它,它可能会回到池中。

关于c# - SqlConnection、连接池和工作单元的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com