c# - Com 调用 64 位服务器上的 32 位应用程序很慢

标签 c# performance com 64-bit 32-bit

我有一个应用程序刚刚迁移到 Windows 2008 R2 64 位。本质上,它是一个 C# .NET 4.0 WCF 应用程序,可以动态调用用 VC6 C++ 编写的 32 位 COM 应用程序。

当我在 Windows 7 32 位桌面上运行它时,COM 调用速度要快得多。

服务器应该更强大一个数量级(尽管在托管环境中)

是否有任何快速/简单的事情我可以检查以尝试弄清问题的根源?我今天要查看分配给虚拟机的资源,但与此同时..

这是一个 64 位调用 32 位 COM 的东西吗?

谢谢!

最佳答案

从 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/

进行一些分析以衡量您的应用在不同情况下的性能。

  • 编译到任何 CPU,在 x64 上运行
  • 编译为 x64,在 x64 上运行
  • 编译为 x86,在 x64 上运行

然后做能给你带来最大性能的事情。

但是……

如果您可以访问 COM 库源代码,最好的办法是在 x64 平台上重新编译它。

关于c# - Com 调用 64 位服务器上的 32 位应用程序很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110195/

相关文章:

c++ - 在 com 中创建字符串数组

c++ - 如何将字符串数组转换为 SAFEARRAY 或 VARIANT 或 COleVariant?

c# - DateTimeFormatInfo.MonthDayPattern 在 Windows Server 2012 中已更改 - 如何将其恢复?

c# - 系统.MissingMethodException : Method 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not found

c# - 快速二进制数字计数器 64 位数字 c#

c# - 将字符串数组从 C# 传递到 C++ Com

c# - 在表单最小化时在任务栏中显示进度条

c# - 如何访问 Azure API 管理中设置变量策略中的请求正文?

python - 提高数组处理的性能

r - 在保留 row.names 的同时对矩阵进行子集化