0

我有一个程序可以访问数据库并执行具有数据库调用的不同方法。我对所有事情都使用了一个连接,但它在执行一项长任务时导致超时:我基本上必须遍历 6000 多条记录并执行一个存储过程。我的事情导致了超时,因为我对所有事情都只使用了一个数据库连接。

然后我更改了代码,因此我为使用“使用”方法调用的每个方法打开和关闭连接。

我应该如何处理将被大量调用的方法。每次访问该方法时都应该打开/关闭连接吗?

还是有不同的方法?

我做这样的事情:

foreach(record in MyCollection)//6000
{
    using(connection = new SqlConnection(conString))
    {
        singledata = GetSingleData(record);
    }
}

这是一个 GetSingleData()

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;
}

它是否有效,或者我可以设置某种计数器,对于每 500 条记录,我可以检查连接是否已关闭,如果它重新打开它。

谢谢

4

2 回答 2

0

没有什么是做某事的唯一好方法。这一切都取决于。在敏捷性是必须的并且您需要创建临时解决方案的情况下,在每个方法调用中打开和关闭连接在理论上可能不是很好,但实际上可以接受。

我敦促您阅读这些术语和概念:

  1. 连接池
  2. 批量操作(批量更新、批量插入)

它们可能会帮助您获得更高的性能。

于 2013-11-13T16:18:36.803 回答
0

尝试使用持久连接。如果您想尝试调整您的系统(对于 MySQL),这篇文章可能会有所帮助: http ://www.mysqlperformanceblog.com/2011/04/19/mysql-connection-timeouts/

希望有帮助。

于 2013-11-13T16:14:19.710 回答