2012-09-10 14 views
5

可能性の重複:
How slow are .NET exceptions?例外処理。キャッチはどれくらいかかりますか?

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

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

第2のフラグメントが速くない、または次のようになります。 はこの

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

と、この(ここでは、我々は例外をスローしていない)との間に違いはありますか?

また、なぜ1つの解決策が他の解決策より速いのかを知りたい。

+0

(新しいNullReferenceException( "Any message");)それは私の誤植です。 –

+2

質問を編集して修正することができます( 'edit'リンクをクリックしてください) – dasblinkenlight

+0

どちらが高速で、2つの有効なコードスニペットを持っているかを知りたいのであれば、数千回あなた自身のために? – Servy

答えて

4

例外は、他のすべてのプログラムの流れよりも遅いですが、限り、彼らはパフォーマンス上の理由から避けるべきではありません。ただし、プログラムフローには使用されません。あなたの状況では、例外を使用するよりも優れた選択肢があります。状況を予測し、例外なく適切に処理できるときは、常にそれを実行します。また、通常のプログラムフローでは、便宜的に例外を使用しないでください。

予期しない例外的な状況が発生した場合は、例外を使用して直接処理することはできません。

+0

ありがとうございます。私がプロジェクトで見つけた最初の断片と私はそれをスロー例外なしでやりたい方が良いと思っています。 –

+0

tryを使用してプログラムのフローを試してみると、try try returnのブロックに置かれ、finallyブロックの一般的なコードでは必ず実行されなければならないと思いますか? –

+0

@DaniilGrankin 'try' /' finally'は、コードの生成方法(return、fall-through、exceptionなど)に関係なく、コードを実行するための重要な構成要素です。一般的に、クリーンアップコードは 'finally'で実行され、' finally'が絶対に例外を投げないことを確認したいとします。これらのことを念頭に置いて、常に適切なときには 'try' /' finally'を使用してください。 –

0

私は、トローがtry/catchよりもオーバーヘッドが多いことを知ります。これにより、try/catchのオーバーヘッドはほとんどありませんが、実際に例外をキャッチする必要がある場合は、小さなオーバーヘッドが発生します。 多くのプログラムでは、表示されるオプションはどちらも問題ありませんが、実際にコードをプロファイリングしようとすると、スローなしですばやくなります。 を見て価値が他の質問のカップル:

Under C# how much of a performance hit is a try, throw and catch block

What is the real overhead of try/catch in C#?

0

このケースでは、2番目の選択肢はより高速ですが、 @サミュエル・ネフの例外は非常に遅いと述べたように と思います。しかし、私がを読んでいたときに、私は興味深いarcticleを見つけたので、私は興味のあるarcticleを見つけました。Krzysztof CwalinaDesign Guidelines Update: Exception Throwing.、これは例外をいつ使うべきか、使ってはならないかを説明しています。 Infactはそれを読んで私が見つけた重要な点は、こう述べています。

1.2例外やパフォーマンス

例外に関連した一つの共通の関心事は、例外が であれば、日常失敗したコードのパフォーマンスのために使用されているものです の実装は受け入れられません。これは非常に有効な懸案事項です。 メンバーが例外をスローすると、パフォーマンスは のオーダーになります。ただし、エラーコードを使用して を禁止する例外ガイドラインを厳密に遵守しながら、良好なパフォーマンスを達成することは可能です( )。このセクションで説明されている2つのパターンは、これを行うための方法を提案しています( )。

  • ため例外がマイナスのパフォーマンスに影響を与える可能性が懸念のない使用エラー・コードを実行してください。
関連する問題