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.
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% 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.
Tags und Links .net reflection vb.net