1

皆さんに短いデザインの質問があります。できるだけ速く実行する必要があるメソッドを取得しましたが、例外によって発生したエラーに関する情報も提供する必要があります。

関数がループ内で 1000 回呼び出される場合がありますが、例外が発生することはほとんどありません (値の 1% 未満でエラーが発生します)。この関数は、非常に単純な数学演算のみを計算し、LINQ などを使用してメソッドを呼び出しません。

ここまでの状況です。以下では、この方法を解決するために必要な 2 つのシナリオについて説明します。

私自身の解決策が最も一般的な方法でした。計算の前に各パラメーターをチェックするだけです(ramainingメソッドの例外を防ぐため):

int FastMethod(int number)
{
    if (number <= 0)
    {
        throw new ArgumentOutOfRangeException();
    }
    // (...) more parameter validations

    // do some operations with the number here
}

私に推奨された他の解決策は、エラーが発生し、キャッチされた例外のみを再スローすることでした:

int FastMethod(int number)
{
    try
    {
        // do some operations with the number here
    }
    catch (Exception ex)
    {
        throw (ex);
    }
}

それで、あなたは何をお勧めしますか?

2 番目のシナリオでは、パフォーマンスを向上させる可能性のあるこれらすべての if ステートメントを呼び出す必要はありませんが、私の意見では設計が不十分に見えます。あなたは私に教えることができます:)

4

2 に答える 2

0

もう 1 つのオプションは、catch ブロックを 1 レベル上の呼び出し元に移動することです。これにより、try/catch ブロックが反復ごとに再設定されなくなります。もちろん、例外の後にループを続行したくない場合にのみ機能します。

一般的なパフォーマンスのアドバイス: 絶対に必要ではないループからすべてを移動します。できるだけ早くエラーを検出するというルールと競合する可能性がありますが、それはトレードオフです。

于 2013-04-19T15:48:22.363 に答える