10

何が私を呼んだかを確認するために次のことを行うだけなら、

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 にとどまっています。

4

1 に答える 1