首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ADO.net:为什么连接池不使用已经打开的连接?

ADO.net:为什么连接池不使用已经打开的连接?
EN

Stack Overflow用户
提问于 2018-01-31 14:23:01
回答 1查看 119关注 0票数 3

此代码的预期行为将是打开一个连接。然后将连接返回到连接池中,并在第二个open()上重用。对吗?

但是,当我在 Server 2005上执行这段代码时,第二个open()将事务转换为一个分布式事务。我从这一刻就看到了服务器上的两个连接。第二个open()大约需要3-4秒。从现在开始,只使用第二种方法。第一种联系似乎在某种程度上被削弱了。

与预期一样, Server 2008 R2只使用一个连接。

有什么想法吗?谢谢!

代码语言:javascript
运行
复制
using (var scope = new System.Transactions.TransactionScope())
{

    var constring = @"Server=xxx;Integrated Security=true;Connect Timeout=10;";

    using (var con = new SqlConnection(constring))
    {
        con.Open();
    }

    using (var con = new SqlConnection(constring))
    {
        con.Open();
    }

    scope.Complete();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 14:27:04

Server 2005不支持“轻量级事务管理器”(LTM) --它不支持这类可升级的事务,因此,为了提供TransactionScope所需的担保,它必须使用一个完整的“分布式事务协调器”(DTC)事务--如果存在环境事务(TransactionScope),它必须立即执行。

当后端服务器supoorts可促进事务时,它允许LTM不这样做,而是使用可以在需要时提升到DTC的LTM事务。在大多数情况下,在单个TransactionScope中不能跨越多个不同的资源,这将是“永远不会”的。

这意味着Server 2005与TransactionScope的结合必须做更多的工作,从而导致这种结果。

由于Server 2005的最终寿命(“扩展支持”结束)是2016年4月12日--这真的不应该伤害到今天的任何人。Server 2008 R2一直到2019年7月9日。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48544447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档