关于 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
}
}
我做了一些分析,因为我的代码(并行 for 循环)产生了一些高 CPU 并且热点似乎是(理所当然的)我对数据库进行的所有调用。由于这些电话非常频繁,我有一些疑问。
在我看来,我的想法是,如果可能的话,我应该重用连接。这是最佳做法吗?我想让代码处理连接处理(使用 using 关键字),如何使用可用于所有 5000 次调用的策略有效地建立连接?我是否应该像现在这样在每次调用该方法时都创建一个连接? (我在某处读到 ADO 连接池自动重用连接,所以也许这已经在后台完成了?)。
感谢您的帮助
最佳答案
通常,对于数据库连接,策略应尽可能晚打开并尽可能早关闭。因此,假设您要执行单个语句/查询,则在执行查询之前打开连接,然后关闭连接。
但是,在您的情况下,您正在循环执行 5000 个查询,因此打开/关闭连接 5000 次没有意义。而是利用单一连接并执行所有查询。
此外,打开和关闭连接只是将连接返回到 .Net 连接池。如果已经有一个打开的连接,则使用 Conn.Open();
打开一个连接将返回连接池中打开的那个连接。请参阅:SQL Server Connection Pooling (ADO.NET)和 Creating database connections - Do it once or for each query?
关于c# - 处理连接/查询的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533868/