cref - remarks c#
¿Cuál es la diferencia entre RuntimeTypeHandle y Type? (2)
¿Y por qué usaría uno sobre el otro en mi código?
En .NET 4.0 Beta 1 RuntimeTypeHandle
simplemente ajusta RuntimeType
. Parece que han desaparecido todos los beneficios de usarlo como un proxy de Type
barato.
Evidencia del reclamo anterior:
- El origen de referencia de Microsoft para el tipo
System.RuntimeTypeHandle
muestra que este tipo es de hecho solo un contenedor alrededor deSystem.RuntimeType
estos días. - El artículo de blog 2013 de Sandro Magi "CLR: El costo de las pruebas de tipo dinámico" contiene un punto de referencia y una nota final que muestra que los supuestos beneficios de rendimiento de
RuntimeTypeHandle
desaparecen en .NET 4.
Precaución: esta respuesta parece estar desactualizada. Se publicó antes de que se lanzara .NET 4, que aparentemente introdujo algunas optimizaciones con respecto al
Type
y, por lo tanto, dejó obsoleta la información de esta respuesta. Vea esta respuesta más reciente para más detalles.
De acuerdo con esta publicación del blog (desde 2006) de Vance Morrison , RuntimeTypeHandle
es un tipo de valor ( struct
) que envuelve un puntero no administrado, por lo que Type.GetTypeHandle(obj).Equals(anotherHandle)
es más rápido de usar para "estricto" es exactamente el mismo escriba "comparaciones que obj.GetType().Equals(anotherType)
- este último crea instancias de System.Type
que son, aparentemente, más pesadas.
Sin embargo, también es menos obvio, y definitivamente cae dentro de la categoría de "micro-optimización", por lo que si se está preguntando cuándo necesita una sobre la otra, probablemente debería usar System.Type.