¿Hay alguna desventaja en el rendimiento al usar CallByName
function en VB.NET? ¿Hay alguna forma mejor de hacer la llamada por Nombre en .NET 2.0 en adelante?Desventajas de la función CallbyName en VB.NET?
Respuesta
CallByBame básicamente le da "enlace tardío" que es "averiguar el método en tiempo de ejecución" en lugar de "enlace anticipado" donde el compilador lo encuentra por usted.
Con la vinculación anticipada puede ser seguro y tendrá un mejor rendimiento, ya que su código irá directamente al método. El compilador lo habrá "revisado" por adelantado.
Con el rendimiento de enlace tardío es más lento ya que el método se busca en tiempo de ejecución y no tiene seguridad de tipo - lo que significa que el método puede no existir realmente y puede obtener una excepción. Pero esto podría ser útil si no conoce el tipo de objeto por alguna razón. También lo uso para llamar al objeto COM si no quiero meterme con un ensamblado de interoperabilidad.
CallByName probablemente llama a Type.InvokeMember. Si desea hacerlo directamente, aquí hay un código que se me ocurrió:
Imports System.Reflection ' For access to BindingFlags '
Friend NotInheritable Class LateBinding
Private Const InvokePublicMethod As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod
Private Const GetPublicProperty As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.GetProperty
Public Shared Function InvokeFunction(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, InvokePublicMethod, Nothing, oObject, yArguments)
End Function
Public Shared Function GetProperty(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, GetPublicProperty, Nothing, oObject, yArguments)
End Function
End Class
"Cecil tiene un nombre" es correcto acerca de que CallByName no almacena en caché nada. Si llama repetidamente los mismos métodos de esta manera, querrá guardar en caché la información del tipo de alguna manera. Las cosas realmente pueden ralentizar si no lo haces. –
Si la función CallByName
no enlaces de método de caché, sería mucho mejor para escribir su propia clase de despacho que almacena una tabla hash para mapear nombre de cadenas a MethodInfo
objetos.
- 1. VB.NET Función genérica
- 2. Llamar a un Sub o Función contenida en un módulo usando "CallByName" en VB/VBA
- 3. ¿Dónde está la documentación para Mi función en VB.Net?
- 4. ¿Cómo convertiría la función de delegado de C# a VB.Net?
- 5. Desventajas de la declaración directa?
- 6. ¿Desventajas genéricas de la propiedad?
- 7. desventajas de la herencia en Java
- 8. ¿Dónde funciona la función "Make Object ID" del depurador VB.Net?
- 9. Desventajas de los métodos estáticos en PHP
- 10. Llamar a una función genérica en VB.NET/C#
- 11. En VB.NET, ¿puedo marcar una función como obsoleta?
- 12. Desventajas de CouchDB
- 13. Desventajas de WebFormsMVP?
- 14. Errores/Desventajas de la Programación Funcional
- 15. Valor absoluto en vb.net
- 16. Agrega espacio de nombres automáticamente en función de la ruta a los recursos incrustados de VB.NET
- 17. VB.NET - Función de búsqueda usando Textbox y cuadro combinado
- 18. Posibles desventajas de Zend
- 19. ¿Cuál es la diferencia entre una propiedad parametrizada y la función en vb.net?
- 20. Desventajas de la administración de sesiones J2EE en ColdFusion
- 21. Cómo suprimir compilador de advertencia para la función específica en VS2005 (VB.Net)
- 22. La superación de las "desventajas" de la inmutabilidad de cadena
- 23. ventajas/desventajas de la opción pconnect en CodeIgniter
- 24. Desventajas de los cuerpos dormidos en Box2D
- 25. Ventajas/desventajas de IIS Web Garden
- 26. VB.NET
- 27. Reader WCFConfiguración de cuotas: ¿desventajas?
- 28. Ventajas/desventajas de los archivos de encabezado
- 29. Desventajas de la altura de la línea sin unidad?
- 30. Desventajas de MySQL Row Locking
No estoy familiarizado con CallByName, ¿en qué contexto lo usaría? ¿Tienes un ejemplo? –
CallByName usará la reflexión. Entonces, no sé si hay otra forma. ¿Podría describir el escenario en el que está utilizando CallByName? Eso ayudará a determinar si necesita CallByName u otra cosa. – shahkalpesh