2011-12-06 7 views
2

.NET例外とパフォーマンス

が、例外の生成は、性能を低下させるなぜ私はこの

の理由を見つけることができませんでしたか?

+3

これを確認してください:http://stackoverflow.com/questions/161942/how-slow-are-net-exceptions –

答えて

1

これは何かをしているからです。何かをするには時間がかかる。

例外をスローすると、オブジェクトが作成され、スタックのコピーが取得され、スタックが2回まで移動し、おそらくドメイン間でマーシャリングされます。物事をするのに時間がかかります。理想的な世界では、それが当てはまるかどうかわからないけれども、(それはあまりない可能性のある支店でなければならないので)取られていると予測されなかった支店にもなります。また、制御が「遠く」のどこかに移動したために、キャッシュが補充されている場合があります。

しかし、例外はデバッガで実行されている場合を除いて特に低速ではありません(明白な理由から、例外がスローされたときにもう一度動作します)。テストや試行やトリプル・レポートをより理にかなったループで試行錯誤をするほど遅いですが、これは良いマイクロ最適化のカテゴリに分類されます(「マイクロ最適化"という言葉はしばしばスラーとして使われますが、意味的に明快なアプローチが少し上手くいくと、その明快さの理由から、それは良いことです - それは数サイクルのために物事をあまり明確でなく意味的に賢明にするときです。 「ミクロ最適化」は負になります)。

0

例外スローのコストに影響を与えるものの1つは、コールスタック情報を持つかなり有益なExceptionオブジェクトです。これは、私たちのためにこのきちんとした情報を構築して保持するために、ある程度の時間とメモリスペースを必要とします。例えば、アンマネージC++は有益なコールスタックを持っていないので、C++でのデバッグはもっと複雑な作業です。

0

"例外があなたのパフォーマンスを大幅に損なうところになった場合、パフォーマンスだけではなく例外の使用に関して問題があります。" - Jon Skeet

つまり、例外的なケースであり、通常の制御フローではない場合、例外をスローするときのパフォーマンス上の不利益は問題ではありません。