2010-06-01 4 views
34

Я заметил, что если я создам приложение WPF для любого CPU/x64, ему потребуется больше времени для запуска (порядка 20 секунд) или для загрузки новых чем при работе на x86 (в выпуске & режима отладки внутри или снаружи VS). Это происходит даже с простейшими приложениями WPF. Проблема обсуждается в this MSDN thread, но ответа там не было. Это происходит только с .NET 4.0 - в 3.5 SP1, x64 был так же быстро, как и x86. Интересно, что Microsoft, похоже, знает об этой проблеме, поскольку по умолчанию для нового проекта WPF в VS2010 является x86.WPF медленно запускается на платформе x64 в .NET Framework 4.0

Является ли это настоящей ошибкой или я просто делаю это неправильно?

EDIT: Возможно, это связано с: Slow Databinding setup time in C# .NET 4.0. Я сильно привязываю данные.

ответ

68

На самом деле есть две основные причины, по которым тип проекта по умолчанию для приложений WPF составляет x86.

  • Отладка Intellitrace работает только с x86, и это выглядело бы очень плохо, если шаблоны проектов по умолчанию не работали с одной из их звездных функций.
  • Многие разработчики до сих пор не знали о том, что их AnyCPU exe будет работать как x64 на 64-битных машинах, и с удивлением обнаружил, что 32-разрядные библиотеки DLL, на которые они ссылались, не существовали в 64-битных вариантах, таких как драйверы OLEDB, некоторые родные DLL и т. Д.

Что касается проблем с запуском, которые вы испытываете, это почти похоже на проблему с NGEN. Поскольку для x64 и x86 существуют различные кэши для NGEN, может быть, необходимо, чтобы 64-разрядный кэш NGEN нужно было перестроить или обновить. Попробуйте выполнить следующие действия из командной строки с повышенной:

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319 
NGEN update 

Это команда заново строить собственные образа для сборок, которые уже были отмечены для НГЕНА. Это также, вероятно, не принесет вам пользы для NGEN вашего приложения, если сборки не находятся в GAC, поэтому я бы не стал пытаться это сделать. Но рамки сборки, комплекты инструментальных средств и т. Д. Должны быть NGEN'd.

(Кстати, я получил несколько ошибок, когда я побежал выше команду о сборках, которые не могут быть загружены. Это было в основном SQL и Визуальные сборки Studio.)

+14

СВЯТОГО ****, это _WORKED_! !! Я бы никогда не подумал об этом. Ты действительно живешь до своей фамилии, чувак. Спасибо * 1000! –

+0

Отлично, рад это слышать. – Josh

+3

Jeebus, этот совет творит чудеса! Как, на самом деле, им удалось не обновлять свой кеш, видя влияние этого? Большая неудача для MS. Кстати, кажется, что вам нужно повторить это после установки определенных обновлений. –

Смежные вопросы