GUIを使用して適切に表示できるように、スローされた例外に関する情報を含むテストロガーを作成しています。
次の構成を使用しても安全ですか。
public class TestLogEntry {
public System.Exception Exception { get; private set; }
public TestLogEntry(/*...,*/ System.Exception exception = null) {
//...
Exception = exception;
}
}
それとも以下の方が良いでしょうか?
public class TestLogEntry {
public string StackTrace { get; private set; }
public System.Type ExceptionType { get; private set; }
public string ExceptionMessage { get; private set; }
public TestLogEntry(/*...,*/ System.Exception exception = null) {
//...
if (exception != null) {
StackTrace = exception.StackTrace;
ExceptionType = exception.GetType();
ExceptionMessage = exception.Message;
}
}
}
最初のアプローチはより柔軟ですが (追加のカスタム データを含めることができるため)、ここに私の懸念があります。
- 例外オブジェクトを長期間保持します。
- 例外オブジェクトが大きなオブジェクトのガベージ コレクションを妨げている場合、大量のメモリを使用します。
- コンテキスト外でアクセスすると、間違った値を返す例外。
Q1. 上記の懸念は有効ですか?
Q2. 通常、例外オブジェクトは他の多くのデータを参照しますか?