Если я просто сделаю следующее, чтобы узнать, что вызвало меня,
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
Правильно ли мой подход (и результаты)?
Edit
Я бы использовал атрибуты Информация о вызывающем абоненте, однако я застрял в .NET 3.5 в настоящее время.