2012-01-10 4 views
9

Tengo una aplicación que está utilizando la reflexión básica hoy para tomar clases.¿Type.GetType() disminuirá en función del tamaño y la complejidad del objeto que está recuperando?

Type type = Type.GetType(mynamespace.myclassname); 
object o = System.Activator.CreateInstance(type); 

quería ver cuán eficiente es el reflejo estaba corriendo por lo que me genera cerca de 150.000 objetos de esta manera para ver si el rendimiento nunca degrada y el rendimiento fue rápido y constante.

Sin embargo, esto me hizo pensar: ¿Se ralentizará la llamada a Type.GetType() en función del tamaño y la complejidad de la clase que se pasa al método GetType()?

Por ejemplo: digamos que queríamos usar GetType() para recuperar una clase compleja compuesta por 30 variables privadas, 30 métodos privados y 30 métodos públicos frente a una clase que tiene solo un público muy simple Add (int, int) método que resume dos números.

¿Type.GetType disminuiría significativamente si la clase que se pasa es una clase compleja frente a una clase simple?

gracias

+1

'GetType()' o 'CreateInstance()'? –

+0

Creo que GetType se resuelve en tiempo de compilación y CreateInstance usa metadatos para que no haya iteración sobre las propiedades de clase, como parece implicar. Puede alguien confirmar esto? (Por cierto, voté a favor, no a la baja, ya que es una pregunta interesante) – Lloyd

+0

Lamento cualquier confusión en mi redacción anterior. Me refiero específicamente a la llamada al método GetType() antes de cualquier creación de instancias a través de System.Activator.CreateInstance(). Gracias – Matt

Respuesta

6

de acuerdo a mi comprensión de las cosas, (y yo soy sólo un programador con experiencia humilde, no soy el creador del lenguaje o de la CLR,) la complejidad de la clase que se está refiriendo de ninguna manera afecta el rendimiento de GetType(). La complejidad de la clase instanciada por supuesto afectará el rendimiento de CreateInstance(), pero eso es de esperar: cuanto mayor sea la clase, cuantas más cosas contenga, más código deberá ejecutarse para poder construirla por completo.

Quizás esté confundiendo GetType() con CreateInstance(), porque me di cuenta de que dice "¿Sería más lento el Type.GetType al crear la instancia de la clase compleja en comparación con la clase simple?" mientras que de hecho GetType() no instancia nada.

4

Se crea una instancia del objeto Type que se ajusta a su tipo cuando se carga el tipo. Este proceso (de una sola vez) obviamente será más o menos costoso dependiendo de la implementación del tipo.

Después de esto, una llamada a GetType() le dará una referencia a esta instancia fácilmente preparada, y por lo tanto no disminuirá con el tiempo o la complejidad.

Cuestiones relacionadas