Ком звонит в 32-битное приложение на 64-битном сервере медленно
У меня есть приложение, которое я только что перенес на 64-разрядную версию Windows 2008 R2. По сути, это приложение CF.NET 4.0 WCF, которое выполняет динамический вызов 32-битного COM-приложения, написанного на VC6 C++.
Когда я запускал это на своем рабочем столе, который является Windows 7 32bit, COM-вызовы были значительно быстрее.
Сервер должен быть на порядок мощнее (хотя и в среде HOSTED)
Есть ли какие-нибудь быстрые / простые вещи, которые я могу проверить, чтобы попытаться докопаться до сути? Я должен сегодня взглянуть на ресурсы, выделенные для виртуальной машины, но в то же время..
Это 64-битный вызывающий 32-битный COM?
Спасибо!
1 ответ
Выполнение 32-разрядного кода из 64-разрядных процессов занимает очень много времени, поскольку включает в себя подсистему Windows on Windows (WoW). 64-битный код и 32-битный код не могут быть запущены в одном и том же процессе, что означает, что все вызовы из вашего кода в 32-битную dll должны проходить границы процессов и архитектуры, что включает в себя некоторую сложную сортировку данных и сортировку вызовов функций.
http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/
Проведите профилирование, чтобы измерить производительность вашего приложения в разных ситуациях.
- Скомпилировать на Any-CPU, запустить на x64
- Скомпилируйте в x64, запустите на x64
- Скомпилируйте в x86, запустите на x64
Тогда делайте то, что дает вам наибольшую производительность.
Тем не мение...
Если у вас есть доступ к исходному коду библиотеки COM, лучше всего перекомпилировать его на платформе x64.