1

我正在使用 Try Catch 进行所有与数据库相关的操作。在此活动中,我甚至在向 ADO.Net 过程发送参数而不实际调用该过程的语句中也使用 Try Catch。如果我使用 Try Catch 来监视实际上永远不会发生异常的代码,它会影响应用程序的性能吗?

前任。1)

Try
{
    SqlParameter[] spParameters =
         { new SqlParameter("@Batch_ID", SqlDbType.BigInt),
           new SqlParameter("@Terminal_ID", SqlDbType.VarChar,8),
           new SqlParameter("@MID",SqlDbType.VarChar,15)

    spParameters[0].Value = nBatch_ID;
    spParameters[1].Value = strTerminal_ID;
    spParameters[2].Value = strMID;

    objResponse.ResponseValue = MyBlock.ExecuteDataset(strConString,
                                               "Insert_Act_Txn", spParameters);

}
catch(Exception Ex)
{
          //logger function to write exception in log file
}

前任。2)

SqlParameter[] spParameters =
          { new SqlParameter("@Batch_ID", SqlDbType.BigInt),
            new SqlParameter("@Terminal_ID", SqlDbType.VarChar,8),
            new SqlParameter("@MID",SqlDbType.VarChar,15)

spParameters[0].Value = nBatch_ID;
spParameters[1].Value = strTerminal_ID;
spParameters[2].Value = strMID;

Try
{
    objResponse.ResponseValue = MyBlock.ExecuteDataset
                               (strConString, "Insert_Act_Txn", spParameters);

}
catch(Exception Ex)
{
      //logger function to write exception in log file
}

在示例中 - 我正在使用 try catch 语句为过程创建参数并为其分配值,其中运行时异常永远不会发生,而不是调用实际过程,但在 Ex.-2 中,我仅在实际调用时使用它这个程序。

如果我从性能的角度考虑,哪种方式好

4

2 回答 2

3

Try 没有性能开销;您可以安全地使用它;如果您抛出异常,它将产生性能开销。

另一方面,优化不在 try 块内执行;但这不会产生开销,除非您有正确的代码(您可以参考try-catch performance)。

来自msdn 性能提示:“查找和设计掉异常密集的代码可以带来不错的性能胜利。请记住,这与 try/catch 块无关:只有在引发实际异常时才会产生成本。你"

于 2013-01-22T07:53:46.253 回答
1

例外总是代价高昂,因为…… 考虑抛出异常时发生的一些事情:

• 通过解释编译器发出的元数据来获取堆栈跟踪,以指导我们的堆栈展开。

• 在堆栈中向上运行一系列处理程序,调用每个处理程序两次。

• 补偿 SEH、C++ 和托管异常之间的不匹配。

• 分配一个托管异常实例并运行它的构造函数。这很可能涉及查找各种错误消息的资源。

• 可能需要浏览操作系统内核。经常出现硬件异常。

• 通知任何附加的调试器、分析器、向量异常处理程序和其他相关方。

除非或其他需要,否则不要使用 Try,Catch。

但是当您使用数据库 API 时,我们不再能够控制可能发生的事情。因此,使用 try 包装这些调用并使用适当的 SQLException 捕获它是安全的。

于 2013-01-22T09:00:28.757 回答