2009-09-10 2 views
2

У меня есть сборка .NET (3.5 framework), и у нее в основном есть набор настраиваемых элементов управления, которые делают много вещей, таких как наброски точек и тому подобное. Сборка компилируется как «AnyCPU», поэтому я могу использовать ее как на 32-битной, так и на 64-битной. Когда я попытался сравнить производительность приложения, использующего эту сборку в 32-битной и 64-битной, я вижу интересные результаты. Производительность приложения состоит из двух частей: один - это задний конец, который выполняет множество вычислений и копирование данных. Другая - фактическая часть чертежа элемента управления. По результатам, похоже, что первая часть быстрее в 32-битной, а вторая - быстрее в архитектуре с 64-битной архитектурой. Может ли кто-нибудь объяснить это поведение? Часть вычислений и копирования данных медленнее в 64-битной, потому что это то, что арифметика с плавающей запятой медленнее в 64 бит по сравнению с 32-битной?32bit vs 64bit performance

PS: Я оценил приложение на 64-разрядной машине AMD с 8 ГБ оперативной памяти, с установленной на нем 32-разрядной и 64-разрядной версией Vista.

ответ

3

Если у вас много ссылок на объекты в вашей вычислительной части, каждая ссылка займет в два раза больше места в 64-битной CLR, что приведет к увеличению использования памяти и, следовательно, сборку мусора. Это основное отличие, о котором я могу думать, но у них также есть разные JIT - может быть, что вычислительная часть вашего приложения происходит, чтобы бить бит JIT, где 32-разрядная версия лучше.

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