C# 数据库超时
我有一个程序可以访问数据库,并执行不同的方法来调用数据库。 我对所有内容都使用了一个conenction,但它在执行长任务时导致超时: 我基本上必须检查6000多条记录并执行一个存储过程。我发现了一个导致超时的问题,因为我只使用了一个数据库连接 然后我更改了代码,所以我用“使用”方法打开和关闭了我调用的每个方法的连接 我应该如何处理将被大量调用的方法。每次访问该方法时是否应打开/关闭连接 还是有不同的方法 我是这样做的:C# 数据库超时,c#,sql,database,C#,Sql,Database,我有一个程序可以访问数据库,并执行不同的方法来调用数据库。 我对所有内容都使用了一个conenction,但它在执行长任务时导致超时: 我基本上必须检查6000多条记录并执行一个存储过程。我发现了一个导致超时的问题,因为我只使用了一个数据库连接 然后我更改了代码,所以我用“使用”方法打开和关闭了我调用的每个方法的连接 我应该如何处理将被大量调用的方法。每次访问该方法时是否应打开/关闭连接 还是有不同的方法 我是这样做的: foreach(record in MyCollection)//6000
foreach(record in MyCollection)//6000
{
using(connection = new SqlConnection(conString))
{
singledata = GetSingleData(record);
}
}
下面是一个GetSingleData()
它是否有效,或者我可以设置某种计数器,对于每500条记录,我可以检查连接是否关闭,然后重新打开
Thank's尝试使用持久连接。如果您想尝试优化您的系统(针对MySQL),这里有一篇文章可能会有所帮助:
希望这能有所帮助。没有什么事情是做某事的唯一好方法。这要看情况而定。在必须具备敏捷性并且需要创建特殊解决方案的情况下,在每个方法调用中打开和关闭连接在理论上可能不好,但在实践中可以接受 我敦促您阅读以下术语和概念:
它们可能会帮助您获得更高的性能。您是否仍然遇到超时问题?重构后问题是否仍然存在,这有点令人困惑。顺便说一句,您现在使用的方法是正确的(没有双关语)。连接池将非常有效地处理资源分配。您应该只在使用连接的特定位置打开连接,完成后立即关闭。(也就是说,使用块将其包装在一个
中,并在该块中包含尽可能少的代码。)您可以发布您的代码吗?显然,使用相同的连接而不关闭或让您的sqlconnection对象超出范围并被垃圾收集是不理想的,我自己创建了一个clsSqlClient,它总是连接一次,直到我关闭它。我在developemt环境中没有超时,只有在生产环境中。这就是为什么我在测试代码时没有得到它
private byte[] GetSingleData(MyObject Data)
{
byte[] singleData = null;
using(SqlCommans......)
{
try
{
.......
//executing stored proc to get just a single row
reader = command.ExecuteReader();
while(reader.Read())
{
singleData = (byte[])reader["ColumnName"];
}
}
catch(SqlException ex)
{
if(!reader.isClosed)
reader.Close();
}
}
return singleData;
}