在1000秒完成操作错误之前经过的超时时间

时间:2018-02-12 11:52:07

标签: c# ado.net connection-pooling datareader connection-timeout

我在源(1200万)和目标(12百万)中有2400万条记录,我正在尝试比较源和目标之间的记录。

错误:

  

超时已过期。在完成之前经过了超时时间   操作

当我为Test method运行我的once时,它工作正常,但是当我并行运行它(thrice)时,我的错误就越来越多了。

我可以将超时增加到更多,但我已经读到设计真的很糟糕并且增加超时的坏主意。

我无法理解这背后的原因,即如何通过调用Test method oncewhy it is failing when it is called thrice来正常工作。

有了这个,我试图测试数据库服务器可以处理的数量,如果我提交大量的比较工作,如下所示:

代码:

static void Main(string[] args)
        {
           Task<string>[] taskArray = { Task<string>.Factory.StartNew(() =>Test()),
                                     Task<string>.Factory.StartNew(() => Test()),
                                     Task<string>.Factory.StartNew(() => Test())
            };
        }


 public static string Test()
 {
   var srcConnection = new SqlConnection("SourceConnectionString");
   srcConnection.Open();
   var command1 = new SqlCommand("Source Sql Query", srcConnection);
   var tgtConnection = new SqlConnection("TargetConnectionString");
   tgtConnection.Open();
   var command2 = new SqlCommand("Target Sql Query", tgtConnection);
   var drA = GetReader(srcConnection, command1);
   var drB = GetReader(tgtConnection, command2);
   bool moreA = drA.Read();
   bool moreB = drB.Read();
   while (moreA && moreB)
    {
       //my logic for 1 - 1 record comparision in case of ordered record on Primary key on source and          target.
    }
 }

 private static IDataReader GetReader(SqlConnection con, SqlCommand command)
        {
            command.CommandTimeout = 1000;
            return command.ExecuteReader();
        }

我无法理解虽然我已将超时设置为1000秒,但为什么失败。

 Task<string>[] taskArray = { Task<string>.Factory.StartNew(() => Test())//Works fine

 Task<string>[] taskArray = { Task<string>.Factory.StartNew(() =>Test()),
                                     Task<string>.Factory.StartNew(() => Test()),
                                     Task<string>.Factory.StartNew(() => Test())
            };//Timeout Error 

来源查询: select Id as LinkedColumn,CompareColumn from Source

目标查询: select Id as LinkedColumn,CompareColumn from Target

源查询Sql server management studio中12377200记录的执行时间:  零点02分10秒

目标查询在Sql server management studio中执行12266800条记录的执行时间:  0点03分37秒

考虑到我想要做什么,处理这种情况的最佳方法是什么?

0 个答案:

没有答案