Reflection Time: 1692.1692ms
Lookup Time: 19.0019ms
Press Enter to exit
:私はこれが古い質問ですけど、私はうまく行っているようだシンプルなソリューションを投げるはずと考えたと維持のシンボル
static void Main(string[] args)
{
int loopCount = 1000000; // 1,000,000 (one million) iterations
var timer = new Timer();
timer.Restart();
for (int i = 0; i < loopCount; i++)
Log(MethodBase.GetCurrentMethod(), "whee");
TimeSpan reflectionRunTime = timer.CalculateTime();
timer.Restart();
for (int i = 0; i < loopCount; i++)
Log((Action<string[]>)Main, "whee");
TimeSpan lookupRunTime = timer.CalculateTime();
Console.WriteLine("Reflection Time: {0}ms", reflectionRunTime.TotalMilliseconds);
Console.WriteLine(" Lookup Time: {0}ms", lookupRunTime.TotalMilliseconds);
Console.WriteLine();
Console.WriteLine("Press Enter to exit");
Console.ReadLine();
}
public static void Log(Delegate info, string message)
{
// do stuff
}
public static void Log(MethodBase info, string message)
{
// do stuff
}
public class Timer
{
private DateTime _startTime;
public void Restart()
{
_startTime = DateTime.Now;
}
public TimeSpan CalculateTime()
{
return DateTime.Now.Subtract(_startTime);
}
}
このコードを実行すると、以下の結果を私に与えます
百万回の反復では、特にストレート・アップ反射と比較して、は全くであり、悪くありません。メソッドグループはDelegate型にキャストされ、ロギングの途中でシンボリックリンクが維持されます。馬鹿な魔法の弦。
@loannisと同様の質問がここに尋ねられます。リンクをチェックしてください。http://stackoverflow.com/questions/1466740/using-getcurrentmethod-in-supposedly-high-performance-code – RameshVel
danielsからの回答「this.GetType()は、呼び出しごとに2.5 ns必要ですが、MethodBase.GetCurrentMethod() .DeclaringTypeはコール1回につき2490 ns必要なので、約1200倍のスピードアップが得られます。 – RameshVel
@Ramesh:これは、質問にすでにリンクしているのとまったく同じ質問だったことに気が付きましたか? –