Pregunta

Me gustaría una respuesta de alguien que realmente hace la programación en tiempo real en C # o que realmente entiende el funcionamiento interno del lenguaje.

Yo sé que las excepciones no deben ser utilizados para manejar el procesamiento normal, pero sólo para detectar condiciones de error. Hay un montón de discusión sobre ese tema.

Me gustaría saber si hay algún tiempo de ejecución desaceleración del simple hecho de tener un bloque try / catch en su lugar (que nunca se detecta una excepción a menos que el programa tendrá que terminar de todos). El bloque try / catch es dentro de una función que debe ser llamado en repetidas ocasiones. Sospecho que hay costos mínima.

Can el costo puede cuantificar en términos de ciclos de CPU, u otras tareas (mismo costo que una multiplicación en coma flotante), o de otra manera?

Utilizamos Microsoft C # .NET 3.5 en Windows XP.

¿Fue útil?

Solución

.NET excepciones tienen un coste de arriba muy, muy bajo a menos que se tiran. Tener un bloque try / catch en su lugar tendrá un impacto muy mínimo en el rendimiento. He encontrado casi ningún impacto, incluso en circuitos muy rápidos y estrechos, a tener el control de excepciones en su lugar.

Sin embargo, excepciones en .NET son muy caros cuando son lanzados. Ellos tienden a ser mucho más alto impacto en el rendimiento si las tiras que muchos otros idiomas. Esto se debe a la información de la pila completa obtenida cuando se crea la excepción, etc.

Este es el comportamiento opuesto a algunos otros idiomas, como el pitón, donde el manejo de excepciones tiene un costo más alto, pero el lanzamiento es en realidad bastante performant.

Sin embargo, si está preocupado, yo sugeriría que un perfil de su rutina, y probar por sí mismo. Esta ha sido mi experiencia después de un poco de perfiles de rendimiento. No hay sustitución para medir en su propia base de código.

Otros consejos

Buena discusión, con métricas, de las implicaciones de rendimiento de intento de captura aquí.

Hacer prueba / rendimiento bloques catch herido cuando las excepciones no se tiran?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top