C# 数据库超时

C# 数据库超时,c#,sql,database,C#,Sql,Database,我有一个程序可以访问数据库,并执行不同的方法来调用数据库。 我对所有内容都使用了一个conenction,但它在执行长任务时导致超时: 我基本上必须检查6000多条记录并执行一个存储过程。我发现了一个导致超时的问题,因为我只使用了一个数据库连接 然后我更改了代码,所以我用“使用”方法打开和关闭了我调用的每个方法的连接 我应该如何处理将被大量调用的方法。每次访问该方法时是否应打开/关闭连接 还是有不同的方法 我是这样做的: foreach(record in MyCollection)//6000

我有一个程序可以访问数据库,并执行不同的方法来调用数据库。 我对所有内容都使用了一个conenction,但它在执行长任务时导致超时: 我基本上必须检查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;
    }