【问题标题】:Recieving timeouts after adding try catch blocks添加 try catch 块后接收超时
【发布时间】:2015-06-21 06:09:54
【问题描述】:

我编写了一些代码来处理大约 6 个包含很多行的表。我花了大约 4 分钟完成工作,但它正确完成。后来,当我添加更多 try catch 块时,我开始收到超时。是否有可能过多的 try catch 块导致超时?如果不是,可能出了什么问题?

我首先通过 OleDbDataAdapter 从 *.mdb 读取数据,然后读取/写入/更新到 MS SQL。

【问题讨论】:

  • I wrote some code 把代码放在这里
  • 哪个 dbms? (这是特定于产品的行为...)
  • @AmeyaDeshpande 很多,超过 1000 行。
  • try/catch 块本身不会导致问题。您无意中更改了代码的逻辑流程。但是,没有人会在没有看到代码的情况下帮助您。

标签: c# sql sql-server timeout try-catch


【解决方案1】:

取决于抛出异常的频率。实际上,如果抛出异常,try-catch bloc 会显着降低代码速度。在我的英特尔 i5-4440 上,调试时每个 catch 块最多需要 30 毫秒。因此,一些具有 1000 次迭代、抛出和捕获异常的循环将需要 30 秒才能完成。

简单证明代码示例

[Test]
public void Test()
{
    var timer = new Stopwatch();

    timer.Start();
    for (int i = 0; i < 1000; i++)
    {
        try
        {
            throw new Exception();
        }
        catch (Exception)
        {
            // do nothing
        }
    }
    timer.Stop();

    Console.WriteLine(timer.ElapsedTicks);

    timer.Reset();
    timer.Start();
    for (int i = 0; i < 1000; i++)
    {
        try
        {
            // do nothing
        }
        catch (Exception)
        {
            // do nothing
        }
    }
    timer.Stop();

    Console.WriteLine(timer.ElapsedTicks);
}

我的 CPU 上的输出(不在调试中):

19119
13

【讨论】:

  • 我怀疑与这些类似的东西是罪魁祸首。我将在不同的计算机和数据库上尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2010-12-15
  • 2011-07-09
相关资源
最近更新 更多