9 Stimmen

Statische Reflektionsleistung

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X