considere el siguiente código ...Por qué utiliza una Func <> de modo mucho más rápido que el uso de la nueva restricción() en una secuencia genérica creador
En mis pruebas para un lanzamiento (no depurar!) X86 construir Windows 7 x64 PC (Intel i7 3 GHz) que obtuvieron los siguientes resultados:
CreateSequence() with new() took 00:00:00.9158071
CreateSequence() with creator() took 00:00:00.1383482
CreateSequence() with new() took 00:00:00.9198317
CreateSequence() with creator() took 00:00:00.1372920
CreateSequence() with new() took 00:00:00.9340462
CreateSequence() with creator() took 00:00:00.1447375
CreateSequence() with new() took 00:00:00.9344077
CreateSequence() with creator() took 00:00:00.1365162
parece que el uso de un Func <> para definir un delegado para crear nuevos objetos es más de 6 veces más rápido que llamar "nueva camiseta() "directamente.
Me parece un poco inesperado ... Supongo que es debido a algunas incrustaciones realizadas por el Jitter, pero habría pensado que podría haber sido capaz de optimizar el "nuevo T()" igual de bien.
¿Alguien tiene una explicación para esto?
Quizás estoy cometiendo un error. (He considerado el efecto que podría tener el recolector de elementos no utilizados, pero reorganizar el código y agregar GC.Collect(), etc., no cambia los resultados significativamente).
De todos modos, aquí está el código:
Ver https://msmvps.com/blogs/jon_skeet/archive/2011/08/22/optimization-and-generics-part-1-the-new-constraint.aspx –
relacionado: http: // stackoverflow. com/questions/367577/why-does-the-c-sharp-compiler-emit-activator-createinstance-when-calling-new-in – nawfal