关于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连接池会自动重用连接,所以这可能已在后台完成了吗?)。
感谢您的帮助
答案 0 :(得分:4)
通常,对于数据库连接,策略应该尽可能晚地打开并尽早关闭。因此,假设您要执行单个语句/查询,然后在执行查询之前打开连接并在此之后关闭连接。
但,在您的情况下,您在循环中执行5000个查询,因此打开/关闭连接5000次没有任何意义。而是利用单个连接并执行所有查询。
此外,打开和关闭连接只返回与.Net连接池的连接。如果已经存在打开的连接,则使用Conn.Open();
打开连接将返回 从连接池打开连接。请参阅:SQL Server Connection Pooling (ADO.NET)和Creating database connections - Do it once or for each query?