Ком звонит в 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.

Другие вопросы по тегам