5

重複の可能性:
.NET 例外はどれくらい遅いですか?

例外をスローしてすぐにキャッチするためのオーバーヘッドはありますか? これに違いはありますか

void DoSomething(object basic)
{
    try
    {
       if (basic == null)
         throw new NullReferenceException("Any message");
       else
       {
         //...
       }
    }
    catch (Exception error)
    {
       _logger.WriteLog(error);
    }
}

そしてこれ(ここでは例外をスローしません):

void DoSomething(object basic)
{
    try
    {
        if (basic == null)
        {
            _logger.WriteLog(new NullReferenceException("Any message");
            return;
        }
        else
        {
         ...
        }
    }
    catch (Exception error)
    {
        _logger.WriteLog(error);
    }
}

2 番目のフラグメントは高速になるかどうか。

また、あるソリューションが別のソリューションよりも速い理由を知りたいです。

4

3 に答える 3

0

この場合、2番目の選択肢の方が速いと思いますが、@Samuel Neffの例外は非常に遅いと言われています。しかし、Jon Skeetの例外に関する記事を読んでいたときに、 Krzysztof Cwalinaによる興味深い記事を見つけました: Design Guidelines Update: Exception Throwing. 、例外を使用する必要がある場合と使用しない場合を説明します。実際、それを読んで、重要な点が次のように述べられていることがわかりました。

1.2 例外とパフォーマンス:

例外に関連する一般的な懸念の 1 つは、日常的に失敗するコードに例外を使用すると、実装のパフォーマンスが許容範囲を超えてしまうことです。これは非常に妥当な懸念です。メンバーが例外をスローすると、そのパフォーマンスが桁違いに遅くなる可能性があります。ただし、エラー コードの使用を禁止する例外ガイドラインに厳密に従うことで、優れたパフォーマンスを実現することができます。このセクションで説明する 2 つのパターンは、これを行う方法を提案しています。

  • 例外がパフォーマンスに悪影響を及ぼす可能性があるため、エラー コードは使用しないでください。
于 2012-09-10T14:33:23.970 に答える