Ich spiele über den statischen Reflexionscode aus Joel Abrahamssons Blog und Daniel Cazzulino's Blog . Aber ich fand ihre Leistung ist ziemlich langsam, auch im Vergleich mit der Refektion mit "magic string".
int iterations = 1000000;
watch.Start();
for (int i = 0; i < iterations; i++)
{
var propertyOfName = Reflect<Employee>.GetProperty(c => c.Name);
}
watch.Stop();
Console.WriteLine("[Reflector]: " + watch.ElapsedMilliseconds.ToString());
watch.Reset();
watch.Start();
for (int i = 0; i < iterations; i++)
{
var propertyName = typeof (Employee).GetProperty("Name");
}
watch.Stop();
Console.WriteLine("[Regular Reflection]: " + watch.ElapsedMilliseconds.ToString());
watch.Reset();
watch.Start();
for (int i = 0; i < iterations; i++)
{
var propertyName = StaticReflection.GetMemberName<Employee>(c => c.Name);
}
watch.Stop();
Console.WriteLine("[StaticReflection]: " + watch.ElapsedMilliseconds.ToString());
Hier ist das Ergebnis:
- [Reflektor] : 37823
- [Regelmäßige Reflexion]: 780
- [Statische Reflexion]: 24362
Warum sollten wir also Static Reflection bevorzugen? Einfach den "magischen String" entfernen? Oder sollten wir etwas Caching hinzufügen, um die Leistung der statischen Reflexion zu verbessern?