我已经创建了一个TransactionScope,并且在该范围内在数据库中创建和更新了各种项。在此过程中,我对数据库进行了大量调用。最初,我在TransactionScope的开头打开一个SqlConnection,并将其传递给任何进行DB调用的函数,然后在所有调用完成之后、事务提交之前关闭连接。是这样做更好,还是为每个调用打开和关闭连接(使用相同的连接字符串)更好?
发布于 2010-05-21 04:54:50
如果您要连续进行大量调用,并且很容易传入打开的连接,那么可以重用打开的连接。
不过,这并不是特别重要。不像以前那么多了。ADO.NET在这方面为您做了很好的管理。参见Connection Pooling。如果您的代码将变得复杂和奇怪,以促进一个单一的,开放的连接对象,这是不值得的。
(现在,确保您的连接对象(无论是否重用)都被处理掉了,这当然非常重要,我打赌您已经知道了。)
发布于 2010-05-21 06:54:28
我倾向于避免不惜一切代价传递连接。我只是看到了太多的错误潜入系统,当其他人,例如,关闭连接在一系列操作的中间,因为他们不知道其他人将使用相同的连接。
由于ADO. one的连接池机制,创建一个SQLConnection几乎不需要,所以不要认为创建一个并传递它会节省任何空间/时间。
如果您确实需要在事务作用域中执行大量DB操作,则适当地管理您的作用域,但在需要时创建、使用和处置您的连接-这将有助于保持代码的整洁和安全。
发布于 2010-05-25 19:15:21
总的来说,我会同意别人所说的。但是,请注意,一旦您在单个TransactionScope实例中使用了多个连接,它将提升您的(本地)事务to a distributed one,从而产生一些可能显著的开销。
来自同一池的多个连接因此使用相同的数据库,在这种意义上也被算作多个连接。
如果这对你来说是一个问题,与代码结构或“整洁”、典型的SQL语句执行时间等相比,你需要做出决定。
https://stackoverflow.com/questions/2877692
复制相似问题