Сборки .Net2, размещенные в приложении .Net4, работают лучше в режиме x86, чем в режиме AnyCpu?

У меня есть приложение .Net4 WinForms, которое ссылается на сторонние сборки .Net2, которые содержат графические визуальные элементы управления. Я заметил огромное улучшение визуальной производительности приложения, когда случайно переключил его с AnyCpu на режим компиляции x86. Моя установка для разработки — это x64 Windows 7. Улучшение как минимум в два раза, когда элементы управления отображают свои графические элементы.

Это общеизвестный факт или я что-то не так делаю?


person Boris B.    schedule 23.08.2011    source источник


Ответы (2)


Смотрите эти две статьи об этом:

Exes AnyCPU обычно доставляют больше проблем, чем пользы

Visual Studio: Почему нет 64-битной версии? (пока)

См. также этот пост о 64-битном коде: Должен ли я выбрать воспользоваться преимуществами 64-битной версии? в нем четко указано, что, например, Paint.NET лучше работает в 64-битном режиме, потому что разработчик оптимизировал код для 64-битной версии.

Итак, я не думаю, что вы делаете что-то не так, но, возможно, используемые вами сторонние сборки .NET можно улучшить, особенно при работе в 64-разрядном процессе.

person Simon Mourier    schedule 23.08.2011
comment
Эти другие сборки используют процедуры управляемого рисования из System.Drawing (которые IIRC просто оборачивает вызовы GDI+), поэтому я не уверен, как их можно улучшить для 64-битной версии, поскольку в управляемом .Net нет оптимизаций для конкретных платформ (которые я знаю из). - person Boris B.; 23.08.2011

Меня бы это не удивило. Когда вы устанавливаете приложение для компиляции «любой процессор», CLR создает приложение, которое джитер на компьютере пользователя должен дополнительно скомпилировать, чтобы наилучшим образом соответствовать его архитектуре. Если вы установите его на «x86», ваш компилятор разработчика компилирует приложение для машины x86, что снижает нагрузку на дрожание клиентов.

person RLH    schedule 23.08.2011
comment
Извиняюсь. JIT означает Just in Time, а ссылка на JITer означает своевременный компилятор, который компилирует код IL в машинный код, специфичный для компьютера пользователя, при первом запуске приложения. - person RLH; 23.08.2011
comment
Я знаю, что такое JIT-компилятор, но никогда не видел JITer как JIT-компилятор. - person abatishchev; 23.08.2011
comment
Хорошо, но я сомневаюсь, что компиляция JIT имеет такое большое влияние. Дело не только в том, что загрузка приложения медленнее или при первом запуске различных модулей, но и в том, что общая производительность приложения заметно ниже. - person Boris B.; 23.08.2011