2011-05-11 14 views
13

He notado en VS 2010 que el objetivo de la plataforma por defecto para un proyecto de C# es x86 (solía ser cualquier CPU), y me preguntaba por qué el cambio.Optimizaciones de destino de la plataforma .Net

¿El compilador realiza optimizaciones basadas en la fijación de la plataforma a x86 vs x64 frente a cualquier CPU?

¿Debo forzar mis aplicaciones a una plataforma u otra por cuestiones de rendimiento?

+0

No sé si se trata de optimizaciones, pero si hace referencia a una biblioteca compilada para x86, también necesitará construir un proyecto para x86 o no podrá cargar el ensamblado en tiempo de ejecución. – R0MANARMY

+1

El cambio se realizó porque rara vez es beneficioso ejecutarlo como un proceso de 64 bits, y con frecuencia no es óptimo (se usa más memoria, no se pueden cargar las bibliotecas necesarias, etc.). – Gabe

+1

Publica esto en la respuesta de @Kragen, pero probablemente debería haberlo puesto aquí - esta [pregunta] (http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target) es bastante útil para comprender el ' Cualquier opción de CPU. –

Respuesta

15

La versión anterior de Visual Studio usaba esto por defecto para "Cualquier CPU", lo que significa que en una máquina x86 siempre terminarías usando x86, mientras que en una máquina x64 terminarías ejecutando x64 o x86 dependiendo sobre si el proceso en el que se está cargando el ensamblaje es de 32 bits o de 64 bits.

El problema es que cuando se inicia un nuevo proceso de un exe .Net construido con la opción "Cualquier CPU" va a terminar como un proceso de 64 bits en lugar de como un proceso de 32 bits que puede causar problemas por 2 razones:

  • Cualquier módulo nativo compilado para x86 (es decir, la mayoría de ellos) ya no se cargará en su proceso (también los errores que obtuvo como resultado de esto eran a veces crípticos si no sabía que debía atender este problema).)
  • Además, a menos que su aplicación utilice más de 4 GB de espacio de direcciones (es decir, memoria: tenga en cuenta que el sistema operativo ya no reserva los primeros 1-2 GB de espacio de direcciones para procesos de 32 bits en un sistema operativo de 64 bits). tiene un código peor que 32 bit debido al aumento en el tamaño del puntero.

Como tan pocas aplicaciones utilizan realmente suficiente espacio de direcciones (es decir, memoria) para que valga la pena la molestia, el valor predeterminado se cambió a 86 con el fin de evitar estos problemas.

+0

Gran respuesta. Gracias por la info. –

+1

También encontré esta [respuesta] (http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target) para ser útil en la comprensión de la opción 'Cualquier CPU'. –

3

Notarás que las bibliotecas aún tienen como valor predeterminado Cualquier CPU y las librerías siempre deben ser Cualquier CPU, de modo que si hubiera optimizaciones, solo se aplicarían a EXEs y eso no tiene sentido. No, el problema es que los ejecutables de la CPU suelen ser más complicados de lo que valen, excepto en manos de aquellos que saben lo que están haciendo. Y para aquellos que saben lo que quieren, los incumplimientos no son un problema grave.

Agregaré que inicialmente no estaba de acuerdo con esta política, pero dado que la experiencia de depuración de x86 es superior, he llegado a aceptarlo como lo que es: el valor predeterminado.

Cuestiones relacionadas