Reflection benötigt eine große Menge der Typ-Metadaten, die geladen und dann verarbeitet werden. Dies kann zu einem größeren Speicheraufwand und einer langsameren Ausführung führen. Gemäß this article ist die Eigenschaftsmodifikation ungefähr 2,5x-3x langsamer und der Methodenaufruf ist 3,5x-4x langsamer.
Hier ist eine hervorragende MSDN article umreißt, wie Reflektion schneller und wo der Overhead ist. Ich empfehle sehr zu lesen, wenn Sie mehr erfahren möchten.
Es gibt auch ein Element der Komplexität, das Reflektion dem Code hinzufügen kann, wodurch es wesentlich verwirrender und damit schwieriger zu bearbeiten ist. Einige Leute, wie Scott Hanselman glauben, dass durch die Verwendung von Reflektion Sie oft mehr Probleme machen, als Sie lösen. Dies ist insbesondere der Fall, wenn Ihre Teams meist Junior Devs sind.
Sie können besser in die DLR (Dynamic Language Runtime) schauen, wenn Sie viel dynamisches Verhalten benötigen. Mit den neuen Änderungen in .NET 4.0 möchten Sie vielleicht sehen, ob Sie etwas davon in Ihre Lösung integrieren können. Die zusätzliche Unterstützung für Dynamic von VB und C# macht die Verwendung von dynamischem Code sehr elegant und das Erstellen eigener dynamischer Objekte relativ einfach.
Viel Glück.
EDIT: Ich habe mehr stochern um Scott Website und fand diese podcast auf Reflexion. Ich habe es nicht gehört, aber es könnte sich lohnen.
wie in der welt habe ich eine abstimmung über ein thema erhalten, das 3 monate alt ist und beantwortet? –
Wir haben unsere Datenzugriffsebene mit generischen Basisklassen und Reflektionen automatisiert. Die meisten unserer generischen Basisklassen werden durch Reflektion implementiert. Dies hat die Anzahl der Codezeilen, die wir für repetitive Aufgaben schreiben müssen, drastisch reduziert. Aber es gab einen Leistungseinbruch. Welche Lösung hast du übernommen? –
wir gingen mit einem sehr ähnlichen Ansatz und sind jetzt Caching der Metadaten. –