パフォーマンスが悪いため、通常のエラー処理に例外を使用するべきではないとよく言われます。私の推測では、パフォーマンスの低下は、新しい例外オブジェクトのインスタンス化、スタック トレースの生成などを行う必要があることが原因であると考えられます。では、なぜ軽量の例外を用意しないのでしょうか? 次のようなコードは論理的に健全です。
string ageDescription = "Five years old";
try {
int age = int.Parse(ageDescription);
}
catch (Exception) {
// Couldn't parse age; handle parse failure
}
それでもTryParse
、例外のオーバーヘッドを回避するために代わりに使用することをお勧めします。しかし、例外がスレッドの開始時に初期化された単なる静的オブジェクトである場合、例外をスローするコードは、エラー コード番号とおそらくエラー文字列を設定するだけです。スタック トレースも、新しいオブジェクトのインスタンス化もありません。これは「軽量の例外」であるため、例外を使用するためのオーバーヘッドが大幅に削減されます。そのような軽量の例外がないのはなぜですか?