.Net Оптимизация целевых платформ

Я заметил, что в VS 2010 целевой платформой по умолчанию для проекта С# является x86 (это был любой процессор), и задавался вопросом, почему это изменение.

Выполняет ли компилятор какие-либо оптимизации на основе исправления платформы до x86 vs x64 vs Any CPU?

Должен ли я форсировать приложения на одной платформе или другой по соображениям производительности?

Ответы

Ответ 1

предыдущая версия Visual Studio использовала для этого значение "Любой процессор", а это означает, что на машине x86 вы всегда будете использовать x86, а на машине x64 вы должны либо запустить x64, либо x86 в зависимости от независимо от того, загружен ли процесс, в который загружается сборка, 32-битный или 64-разрядный.

Проблема заключается в том, что при запуске нового процесса .Net exe, построенный с опцией "Любой процессор", закончится как 64-битный процесс, а не как 32-битный процесс, который может вызвать проблемы по двум причинам:

  • Любые собственные модули, скомпилированные для x86 (т.е. большинство из них) больше не будут загружаться в ваш процесс (также ошибки, которые вы получили в результате этого, иногда были загадочными, если вы не знали, чтобы посмотреть на эту проблему).
  • Кроме того, если ваше приложение фактически использует более 4 ГБ адресного пространства (т.е. память), обратите внимание, что операционная система больше не резервирует верхние 1-2 ГБ адресного пространства для 32-битных процессов в 64-разрядной ОС), 64-разрядный код часто выполняет хуже, чем 32-битный код из-за увеличенного размера указателя.

Поскольку так мало приложений на самом деле используют достаточно адресного пространства (т.е. памяти), чтобы сделать проблему трудной, по умолчанию было изменено на x86, чтобы избежать этих проблем.

Ответ 2

Вы заметите, что библиотеки по умолчанию для любого процессора и libaries всегда должны быть любым CPU, поэтому, если бы были оптимизации, они применимы только к EXE, и это не имеет смысла. Нет, проблема в том, что любые исполняемые файлы процессора обычно более сложны, чем они стоят, за исключением тех, кто знает, что они делают. И для тех, кто знает, чего они хотят, значения по умолчанию не являются серьезной проблемой.

Я добавлю, что сначала не соглашался с этой политикой, но поскольку опыт отладки x86 превосходен, я пришел, чтобы принять его как то, что он есть: по умолчанию.