何が私を呼んだかを確認するために次のことを行うだけなら、
var st = new StackTrace();
var callingMethod = st.GetFrame(1).GetMethod()
その特定のフレームだけを入手した方が安くなりますか?
var sf = new StackFrame(1);
var callingMethod = sf.GetMethod()
以下のコードでテストしましたが、私の方法が正しいかどうかはわかりません。
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 100000; i++)
{
var method = new StackFrame(1, false);
}
sw.Stop();
Trace.WriteLine(sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (int i = 0; i < 100000; i++)
{
var method = new StackTrace().GetFrame(1);
}
sw.Stop();
Trace.WriteLine(sw.ElapsedMilliseconds);
// Results
// StackFrame: 850
// StackTrace: 1334
私のアプローチ (および結果) は正しいですか?
編集
Caller Information属性を使用したいと思いますが、当面は .NET 3.5 にとどまっています。