No hay forma de que tome un segundo para las iteraciones de 1900 a menos que esté ejecutando en el depurador. Ejecutar pruebas de rendimiento bajo el depurador es una mala idea.
EDIT: Tenga en cuenta que esto no es un caso de cambio de la liberación construir - se trata de un caso de ejecución sin el depurador; es decir, presionar Ctrl-F5 en lugar de F5.
Dicho esto, provocar excepciones cuando se pueden evitar muy fácilmente es también una mala idea.
Mi opinión sobre el desempeño de excepciones: si está usando de manera apropiada, no deben causar problemas de rendimiento significativas menos que usted está en una situación catastrófica de todos modos (por ejemplo, que estamos tratando de hacer cientos de miles de llamadas al servicio web y la red no funciona).
Las excepciones son costosas en los depuradores, sin duda en Visual Studio, de todos modos, debido a la determinación de si entrar o no en el depurador, etc. y probablemente realizar cualquier cantidad de análisis de la pila que de otra forma sería innecesario. Siguen siendo un tanto caros de todos modos, pero no deberías tirar suficientes para darte cuenta. Todavía hay que deshacerse de la pila, encontrar manejadores de captura relevantes, etc., pero esto solo debería estar ocurriendo cuando algo está mal en primer lugar.
EDIT: Por supuesto, una excepción es todavía va a dar un menor número de iteraciones por segundo (aunque 35000 sigue siendo un número muy bajo - Me esperaba más de 100K) porque estás haciendo casi nada en la no -caso de la excepciónVeamos los dos:
versión
no excepción del cuerpo del bucle
- Asignar a la variable nula
- Compruebe si la variable es nula; que es, a fin de ir de nuevo a la parte superior del bucle
(Como se ha mencionado en los comentarios, es muy posible que el JIT optimizar esta distancia de todos modos ...) versión
Excepción:
- Asignar a la variable nula
- desreferencia variables
- cheque implícito de nulidad
- Crear un objeto de excepción
- Compruebe si hay controladores de excepciones filtrados para llamar
- buscar la pila para el bloque catch para saltar a
- Compruebe si hay bloques finally
- rama apropiada
¿No es de extrañar que esté viendo un menor rendimiento?
Ahora compare eso con la situación más común en la que hace un montón de trabajo, posiblemente IO, creación de objetos, etc. - y quizás se emite una excepción. Entonces la diferencia se vuelve mucho menos significativa.
como pregunta. voy a probarlo –
Usando 'if (test! = Null)' sería más claro por cierto. –
@Jon Skeet: ¿No sería también un poco más rápido? (Una operación de CPU en lugar de dos) – Powerlord