Com调用64位服务器上的32位应用程序慢
问题描述:
我有一个应用程序,我刚刚迁移到Windows 2008 R2 64位。本质上,它是一个C#.NET 4.0 WCF应用程序,它可以动态调用用VC6 C++编写的32位COM应用程序。Com调用64位服务器上的32位应用程序慢
当我在我的桌面上运行Windows 7 32位时,COM调用速度相当快。
服务器应该是一个数量级的更强大的(虽然在托管环境中)
是否有任何快速/容易的事情,我可以检查,试图得到这条底线?我今天要到虚拟机上分配的资源,但在同时..
这是一个64位调用32位COM的事情?
谢谢!
答
从64位进程运行32位代码非常耗时,因为它涉及Windows子系统(WoW)上的Windows。 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平台上。
解决方案将是针对x64平台编译COM应用程序。应该没有理由使用较新版本的Visual Studio(即,Visual C 6在他们刚刚作为单独程序销售时是Visual Studio 6)。 – 2012-02-02 11:52:00
缺少详细信息。这是一个进程外的COM服务器吗?它运行在同一台机器上吗?什么是“托管”,它实际上在虚拟机中运行? COM +?托管代码是否在AnyCPU中运行?这是一个公寓线程对象吗? – 2012-02-02 12:20:41