32位应用程序在64位服务器上的COM调用速度变慢

4
我有一个应用程序,刚迁移到了Windows 2008 R2 64位系统。它实质上是一个C# .NET 4.0 WCF应用程序,会动态调用一个用VC6 C++编写的32位COM应用程序。
当我在我的Windows 7 32位桌面上运行时,这些COM调用要快得多。
服务器应该强大了一个数量级(虽然在托管环境下)。
有没有一些快速/简单的方法可以检查来找出问题的原因?今天我需要查看分配给虚拟机的资源,但与此同时...
这是64位调用32位COM的问题吗?
谢谢!

解决方案是针对 x64 平台编译 COM 应用程序。没有理由使用较新版本的 Visual Studio(即 Visual C 6 在当时被市场营销为单独的程序) 。 - Security Hound
缺少太多细节了。这是一个 out-of-process COM 服务器吗?它在同一台机器上运行吗?"hosted" 是什么意思,它实际上在虚拟机中运行吗?COM+?托管代码是否以 AnyCPU 运行?这是一个公寓线程对象吗? - Hans Passant
1个回答

5

从 64 位进程中运行 32 位代码非常耗时,因为它涉及到 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 平台上重新编译它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接