¿Qué consecuencias inusuales e inesperadas han ocurrido en términos de rendimiento, memoria, etc. al cambiar de ejecutar sus aplicaciones .NET bajo el JIT de 64 bits frente al JIT de 32 bits? Estoy interesado en lo bueno, pero estoy más interesado en los problemas sorprendentemente malos que las personas se han topado.Mi dolor de cabeza de 32 bits ahora es una migraña de 64 bits?!? (o 64 bits .NET CLR Runtime issues)
Estoy en proceso de escribir una nueva aplicación .NET que se implementará tanto en 32 bits como en 64 bits. Ha habido muchas preguntas relacionadas con los problemas relacionados con la migración de la aplicación. No me preocupa el "gotchas" from a programming/porting standpoint. (es decir: manejar la interpolación nativa/COM correctamente, tipos de referencia incrustados en las estructuras que cambian el tamaño de la estructura, etc.)
Sin embargo, this question and it's answer me hizo pensar - ¿Qué otros problemas estoy pasando por alto?
Ha habido muchas preguntas y publicaciones en el blog que rodean este tema, o tocan un aspecto del mismo, pero no he visto nada que haya compilado una lista decente de problemas.
Particularmente - Mi aplicación está muy atada a la CPU y tiene grandes patrones de uso de memoria (de ahí la necesidad de 64 bits en primer lugar), además de ser de naturaleza gráfica. Me preocupa qué otros problemas ocultos pueden existir en el CLR o JIT que se ejecuta en Windows de 64 bits (usando .NET 3.5sp1).
Éstos son algunos problemas actualmente estoy al tanto de:
- (Now I know that) Propiedades, incluso propiedades automáticas, no se inline en x64.
- El perfil de memoria de la aplicación cambia, tanto por la size of references, sino también porque el asignador de memoria tiene diferentes características de rendimiento
- Startup times can suffer on x64
me gustaría saber lo que otros, específicos, problemas de las personas han descubierto en el JIT en Windows de 64 bits, y también si hay soluciones para el rendimiento.
¡Gracias a todos!
---- ----- EDITAR
sólo para aclarar -
Soy consciente de que se trata de optimizar temprana es a menudo mal. Soy consciente de que adivinar el sistema a menudo es malo. También sé que la portabilidad a 64 bits tiene sus propios problemas: corremos y probamos sistemas de 64 bits diariamente para ayudar con esto. etc.
Mi aplicación, sin embargo, no es la aplicación comercial típica. Es una aplicación de software científico. Tenemos muchos procesos que utilizan 100% de CPU en todos los núcleos (está altamente enhebrado) durante horas.
Pasé MUCHO tiempo perfilando la aplicación, y eso hace una gran diferencia. Sin embargo, la mayoría de los perfiladores desactivan muchas características del JIT, por lo que los pequeños detalles en cosas como asignación de memoria, alineación en el JIT, etc., pueden ser muy difíciles de precisar cuando se ejecuta bajo un perfilador. De ahí mi necesidad de la pregunta.
Este hilo sería mucho más útil (fácil de encontrar con Google o Stacko-search, etc.) si el título se refería a .NET de 32 y 64 bits. –