Es shown que 'como' el lanzamiento es mucho más rápido que el moldeado con prefijo, pero ¿qué pasa con 'es' reflejo? ¿Qué tan malo es? Como se puede imaginar, buscar 'es' en Google no es tremendamente efectivo.¿Cuáles son las características de rendimiento de la reflexión 'es' en C#?
Respuesta
Hay algunas opciones:
- El clásico fundido:
Foo foo = (Foo)bar
- El
as
operador de conversión:Foo foo = bar as Foo
- El
is
prueba:bool is = bar is Foo
- El fundido clásica necesita para comprobar si
bar
pueda emitir de manera segura aFoo
(rápida), y luego lo ponga en práctica (más lento), o lanzar una excepción (muy lento). - El operador
as
necesita para comprobar sibar
pueda emitir, a continuación, hacer el reparto, o si no se puede lanzar con seguridad, entonces, sólo se vuelvenull
. - El operador
is
solo comprueba sibar
se puede convertir a Foo y devuelveboolean
.
La prueba is
es rápida, ya que sólo lo hace la primera parte de una operación de colada completa. El operador as
es más rápido que un elenco clásico porque no lanza una excepción si el lanzamiento falla (lo que lo hace bueno para situaciones en las que legítimamente esperas que el lanzamiento falle).
Si sólo necesita saber si la variable bar
es una Foo
a continuación, utilizar el operador is
, PERO, si se va a probar si bar
es una Foo
, y si es así, entonces lo arrojó , luego debe usar el operador as
.
Esencialmente, cada elenco debe hacer el equivalente a una verificación is
internamente para comenzar, a fin de garantizar que el elenco sea válido. Por lo tanto, si realiza una verificación is
seguida de un molde completo (ya sea un molde as
, o con el operador de conversión clásico), efectivamente está haciendo el control is
dos veces, lo cual es una pequeña sobrecarga adicional.
El cheque es el más lento, el lanzamiento es muy rápido en los tipos de referencia, porque simplemente devuelve la referencia. –
Esta respuesta me ayudó a tener la idea .. – nawfal
"es" es básicamente equivalente al operador de IL "isinst", que ese artículo describe como rápido.
Debe ser lo suficientemente rápido como para no importar. Si usted está mirando el tipo de una lo suficientemente objetivo para que tenga un impacto notable en el rendimiento que necesita para reconsiderar su diseño
La forma en que aprendí es que esto:
if (obj is Foo) {
Foo f = (Foo)obj;
f.doSomething();
}
es más lento de lo siguiente:
Foo f = obj as Foo;
if (f != null) {
f.doSomething();
}
¿Es lo suficientemente lento como para importar? Probablemente no, pero es tan simple prestarle atención, que es mejor que lo hagas.
- 1. ¿Cuáles son las mejores características de Scala?
- 2. ¿Cuáles son las características ocultas de Maven2?
- 3. ¿Cuáles son las características más abusadas en Visual Studio/C#?
- 4. ¿Cuáles son las características de fuente predeterminadas en Android?
- 5. ¿Cuáles son las características del código de spaghetti?
- 6. ¿Cuáles son las características de ANTLR que XText no proporciona?
- 7. ¿Cuáles son las características/beneficios clave de RIA Services?
- 8. ¿Cuáles son las características propuestas más útiles de C1X?
- 9. ¿Cuáles son las características de un token OAuth?
- 10. ¿Cuáles son las características de un MBean JMX bien diseñado
- 11. ¿Cuáles son las nuevas características en Eclipse Helios?
- 12. ¿Qué significa stream? ¿Cuáles son sus características?
- 13. ¿Cuáles son algunas características útiles de TextMate?
- 14. ¿Cuáles son las similitudes y diferencias entre las características de tipeo en Typed Racket y las características tipográficas en Clojure?
- 15. ¿Cuáles son las cosas buenas de baba?
- 16. CSS3 - ¿Cuáles son las mejores prácticas de rendimiento?
- 17. En la programación de juegos, ¿cuáles son las características específicas de C++ o STL que causan problemas de desempeño?
- 18. ¿Cuáles son las mejores características/más estables de la biblioteca de cierre de Google
- 19. Rendimiento de reflexión - Crear delegado (Propiedades C#)
- 20. ¿Cuáles son las nuevas características útiles de ASP.NET en .NET Framework 3.5?
- 21. ¿Cuáles son algunas de las características más útiles aunque poco conocidas en el lenguaje PowerShell
- 22. ¿Cuáles son las implicaciones de rendimiento de usar require_dependency en las aplicaciones de Rails 3?
- 23. ¿Cuáles son algunas características interesantes del código fuente de EveryBlock.com?
- 24. ¿Cuáles son las características del tipo de matriz de PHP como estructura de datos?
- 25. ¿Cuáles son las bibliotecas comunes para C?
- 26. ¿Cuáles son las ventajas de usar Objective-C sobre C++
- 27. ¿Cuáles son las convenciones de nomenclatura en C#?
- 28. ¿Cuáles son las mejores características de un marco de capa de datos para aplicaciones WPF/MVVM?
- 29. Cuáles son las desventajas de Typed DataSets
- 30. ¿Cuáles son las ventajas de Lazy Evaluation?
'is' es muy muy rápido. –
Me doy cuenta de que la fecha no es el único factor determinante en el cierre de las preguntas duplicadas, pero mi pregunta fue publicada, respondida y votada antes de que se publicara la otra pregunta. _It_ es el duplicado, no este. –