Nachteile der CallbyName-Funktion in VB.NET?

8

Gibt es Leistungseinbußen, wenn Sie die Funktion CallByName in VB.NET verwenden ? Gibt es eine bessere Möglichkeit, den Aufruf von Name in .NET 2.0 abzurufen.

    
Greens 12.08.2009, 17:34
quelle

2 Antworten

7

CallByBame gibt Ihnen im Grunde "späte Bindung", die "die Methode zur Laufzeit ausarbeitet", im Gegensatz zur "frühen Bindung", wo der Compiler es für Sie herausfindet.

Mit der frühen Bindung können Sie typsicher sein und Sie werden eine bessere Leistung haben, da Ihr Code direkt zu der Methode passt. Der Compiler wird Ihnen im Voraus "nachgeschaut" haben.

Bei der späten Bindung ist die Leistung langsamer, da die Methode zur Laufzeit gesucht wird und Sie keine Typsicherheit haben. Dies bedeutet, dass die Methode möglicherweise nicht existiert und Sie eine Ausnahme erhalten könnten. Dies kann jedoch nützlich sein, wenn Sie den Objekttyp aus irgendeinem Grund nicht kennen. Ich benutze es auch, um COM-Objekt aufzurufen, wenn ich nicht mit einer Interop-Assembly herumhantieren möchte.

CallByName ruft höchstwahrscheinlich Type.InvokeMember auf. Wenn du es direkt machen willst, hier ist ein Code, den ich mir ausgedacht habe:

%Vor%     
Tom Winter 19.08.2009, 13:31
quelle
2

Wenn die Funktion CallByName keine Methodenbindungen zwischenspeichert, wäre es viel besser, eine eigene Dispatch-Klasse zu schreiben, die eine Hashtabelle zum Zuordnen von Namenszeichenfolgen zu MethodInfo objects speichert.

    
Cecil Has a Name 19.08.2009 13:44
quelle

Tags und Links