处理连接/查询的最佳实践

时间:2014-12-17 20:01:44

标签: c# .net

关于C#最佳实践的问题。我有一个迭代超过5000个对象的类,并为每个对象调用后端:

课程循环播放:

for(Object x in objects) //5000
{
   nonStaticObject.callThisMethod(x.id);
}

DAL图层:

ReturnObject x = null;
using(SQLConnection...)
{
    using(SQLCommand...)
    {
         // run something here
         // if found, instantiate object x
    }
}

我做了一些分析,因为我的代码生成了一些高CPU(并行循环),而热点似乎(并且正确地说)我正在对数据库进行的所有调用。因为这些电话非常频繁,所以我有一些问题。

在我看来,我的想法是如果可能的话我应该重用连接。这是最佳做法吗?我想允许代码处理连接处理(使用using关键字),如何使用可用于所有5000个调用的策略有效地建立连接?我应该像现在这样每次调用该方法创建一个连接吗? (我在某处读到ADO连接池会自动重用连接,所以这可能已在后台完成了吗?)。

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

通常,对于数据库连接,策略应该尽可能晚地打开并尽早关闭。因此,假设您要执行单个语句/查询,然后在执行查询之前打开连接并在此之后关闭连接。

,在您的情况下,您在循环中执行5000个查询,因此打开/关闭连接5000次没有任何意义。而是利用单个连接并执行所有查询。

此外,打开和关闭连接只返回与.Net连接池的连接。如果已经存在打开的连接,则使用Conn.Open();打开连接将返回 从连接池打开连接。请参阅:SQL Server Connection Pooling (ADO.NET)Creating database connections - Do it once or for each query?