注
このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。
例外に関連する一般的な懸念事項の 1 つは、定期的に失敗するコードに例外が使用されている場合、実装のパフォーマンスが許容できないことです。 これはもっともな心配です。 メンバーによって例外がスローされる場合、そのパフォーマンスが桁違いに低下する可能性があります。 ただし、エラー コードの使用を禁止する例外ガイドラインに厳密に従いながら、優れたパフォーマンスを実現できます。 このセクションで説明する 2 つのパターンは、これを行う方法を示しています。
❌ 例外がパフォーマンスに悪影響を与える可能性があるため、エラー コードを使用しないでください。
パフォーマンスを向上させるために、次の 2 つのセクションで説明する Tester-Doer パターンまたは Try-Parse パターンを使用できます。
Tester-Doer パターン
例外をスローするメンバーを 2 つに分割することで、メンバーのパフォーマンスを向上させることができる可能性があります。 Add インターフェイスのICollection<T>メソッドを見てみましょう。
ICollection<int> numbers = ...
numbers.Add(1);
コレクションが読み取り専用の場合、メソッド Add によって (例外が) スローされます。 これは、メソッド呼び出しが頻繁に失敗することが予想されるシナリオでは、パフォーマンスの問題になる可能性があります。 この問題を軽減する方法の 1 つは、値を追加する前にコレクションが書き込み可能かどうかをテストすることです。
ICollection<int> numbers = ...
...
if (!numbers.IsReadOnly)
{
numbers.Add(1);
}
条件のテストに使用されるメンバー (この例ではプロパティ IsReadOnly) は、テスターと呼ばれます。 可能性があるスロー操作を実行するために使用されるメンバー (この例では Add メソッド) を Doer と呼びます。
一般的なシナリオで例外をスローする可能性があるメンバーには、例外に関連するパフォーマンスの問題を回避するために Tester-Doer パターンを考慮しましょう。
Try-Parse パターン
パフォーマンスが非常に高い API の場合は、前のセクションで説明した Tester-Doer パターンよりもさらに高速なパターンを使用する必要があります。 このパターンは、メンバーの名前を調整して、明確に定義されたテストケースをメンバーの意味論に組み込むことを求めています。 たとえば、 DateTime は、文字列の解析が失敗した場合に例外をスローする Parse メソッドを定義します。 また、解析を試行する対応する TryParse メソッドも定義しますが、解析が失敗した場合は false を返し、 out パラメーターを使用して解析が成功した結果を返します。
public struct DateTime
{
public static DateTime Parse(string dateTime)
{
...
}
public static bool TryParse(string dateTime, out DateTime result)
{
...
}
}
このパターンを使用する場合は、try 機能を厳密に定義することが重要です。 適切に定義された try 以外の理由でメンバーが失敗した場合でも、メンバーは対応する例外をスローする必要があります。
✔️ 一般的なシナリオで頻繁に例外が発生する可能性のあるメンバーに対して、例外に関連したパフォーマンス問題を回避するために、Try-Parse パターンの使用を検討してください。
✔️ このパターンを実装するメソッドには、プレフィックス "Try" と Boolean の戻り値の型を使用してください。
✔️ Try-Parse パターンを使用して、メンバーごとに例外をスローするメンバーを用意してください。
Portions © 2005, 2009 Microsoft Corporation. All rights reserved.
フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。