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 ブロックとは関係がないことに注意してください。実際の例外がスローされたときにのみコストが発生します。必要な数の try/catch ブロックを使用できます。むやみに例外を使用すると、パフォーマンスが低下します。たとえば、制御フローに例外を使用するようなことは避けてください。"

于 2013-01-22T07:53:46.253 に答える
1

例外は常にコストがかかります…. 例外をスローしたときに起こるいくつかのことを考慮してください。

• コンパイラによって出力されたメタデータを解釈してスタック トレースを取得し、スタックの巻き戻しをガイドします。

• 各ハンドラーを 2 回呼び出して、スタックのハンドラー チェーンを実行します。

• SEH、C++、マネージ例外間の不一致を補正します。

• マネージ例外インスタンスを割り当て、そのコンストラクターを実行します。ほとんどの場合、これにはさまざまなエラー メッセージのリソースの検索が含まれます。

• おそらく OS カーネルをたどる。多くの場合、ハードウェア例外を発生させます。

• 接続されているデバッガー、プロファイラー、ベクトル化された例外ハンドラー、およびその他の関係者に通知します。

必要な場合を除き、Try,Catch を使用しないでください。

しかし、データベース API を使用している場合は、何が起こるかを制御できなくなります。したがって、これらの呼び出しを try でラップし、適切な SQLException でキャッチしても安全です。

于 2013-01-22T09:00:28.757 に答える