Reflection y llamada dinámica a método

26/03/2007 - 22:17 por Marianoh | Informe spam
Hola

Tengo una clase que llama a métodos a partir de un string con su
nombre utilizando InvokeMember, ahora, como las llamadas se repiten
muchas veces, quiero hacerlas de la manera más performante posible.

Si creo un methodinfo para cada llamada ¿es más rápido?

Agradezco comentarios u otra forma de hacerlo.

Gracias

Preguntas similare

Leer las respuestas

#16 Hernan
28/03/2007 - 12:16 | Informe spam
> > Aquí es donde veo que reflection hace agua y quisiera ver una manera
> >más rápida.

> No veo ninguna necesidad de usar la reflexión.¿Por que no pones un
> switch y listo?

> Saludos

Los métodos a los que llámo están en un proyecto separado que lo
único que contiene es una clase con todos esos métodos estáticos, pero
las llamadas se hacen desde otro proyecto mucho más importante y en el
que no trabajo yo solo y que incluye otros procesos con esos datos.

Como la fuente de datos depende de un organismo externo sobre el que
no tengo control, quiero que en el caso de que haya que incluir nuevos
métodos (debido a cambios en el formato de origen), me alcance con
pisar la dll con los métodos y editar el xml, sin tener que meter mano
donde, por otro lado, no tengo permiso.

Varios de los proyectos en los que estoy participando tiene este
tipo de entrada de datos y quiero una solución lo más desacoplada
posible, por eso estoy separando el ingreso de datos, la salida y las
validaciones.



Si defines bien la API, puedes desacoplarte todo lo que quieras
(mediante interfaces, por ejemplo) sin necesidad de usar reflexion.
Lo único que necesitarás es agregar o modificar la nueva referencia
en el proyecto y recompilar.

-H.
Respuesta Responder a este mensaje
#17 Marianoh
03/05/2007 - 20:05 | Informe spam
Si a alguien le sirve, escribo como resultó el asunto:

El problema de utilizar un switch es manejar la conversión de tipos,
aparentemente no hay una manera performante de convertir un string en
un tipo de datos del cual tenemos el nombre en otra cadena (p.ej.
"System.Int32"), por lo que la solución que utilizé es el componente
FileHelpers (http://www.filehelpers.com). Este, en vez de mapear los
datos con un XML, utiliza una clase con miembros del tipo indicado que
tenemos que crear nosotros, y para simplificarlo el autor entrega un
wizard para generar dicha clase. ¿Que hace? parsea el archivo de texto
y devuelve un array con una instancia de nuestra clase para cada
registro del txt.

Despues hay que llamar a los métodos de validación para los datos de
cada clase.

Por supuesto que no se puede cambiar la estructura del archivo de
texto sin recompilar, pero la funcionalidad del componente es muy
buena y hasta permite retornar una colección de los errores del txt
sin abortar el parseo.

Bueno, hasta aquí llegué yo, lo único que se me ocurre es generar una
clase como la que pide el Filehelpers, mediante reflection una sola
vez antes del proceso y a partir de un archivo externo, pero
desarrollarlo excede el tiempo (y conocimiento :P ) del que dispongo
ahora.

Slds.
Respuesta Responder a este mensaje
#18 MarcosMeli
03/05/2007 - 22:20 | Informe spam
On May 3, 3:05 pm, Marianoh wrote:
Si a alguien le sirve, escribo como resultó el asunto:

El problema de utilizar un switch es manejar la conversión de tipos,
aparentemente no hay una manera performante de convertir un string en
un tipo de datos del cual tenemos el nombre en otra cadena (p.ej.
"System.Int32"), por lo que la solución que utilizé es el componenteFileHelpers(http://www.filehelpers.com). Este, en vez de mapear los
datos con un XML, utiliza una clase con miembros del tipo indicado que
tenemos que crear nosotros, y para simplificarlo el autor entrega un
wizard para generar dicha clase. ¿Que hace? parsea el archivo de texto
y devuelve un array con una instancia de nuestra clase para cada
registro del txt.

Despues hay que llamar a los métodos de validación para los datos de
cada clase.

Por supuesto que no se puede cambiar la estructura del archivo de
texto sin recompilar, pero la funcionalidad del componente es muy
buena y hasta permite retornar una colección de los errores del txt
sin abortar el parseo.

Bueno, hasta aquí llegué yo, lo único que se me ocurre es generar una
clase como la que pide elFilehelpers, mediante reflection una sola
vez antes del proceso y a partir de un archivo externo, pero
desarrollarlo excede el tiempo (y conocimiento :P ) del que dispongo
ahora.

Slds.



Hola que tal, perdon que llegue tarde a la discussion.

Con los filehelpers podes creer tambien un mapeo XML y a partir de ahi
leer el archivo a un datatable.

Busca por RunTime Records en la ayuda.
Otra opcion es creer las clases con los DelimitedClassBuilder or
FixedLengthClassBuilder, y le podes cambiar los campos y demas en
tiempo de ejecucion y sin recompilar.

Cualquier cosa enviame un mail y trato de darte una mano.

Saludos
Marcos Meli
http://www.filehelpers.com
marcos [at] filehelpers.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida