我正在使用.Net C#应用程序的本机COM服务器
除了从COM服务器到.Net应用程序的回调逐渐变慢之外,一切正常。服务器和.Net应用程序始终在同一台计算机上运行。
从.Net调用COM服务器总是很快。
奇怪的是,即使它们运行相同的二进制文件,它也不会在所有计算机上发生。
我在这个问题上花了很多时间。比较回调速度快的环境与速度慢但没有发现任何特殊情况的环境。
- 回调开始很快,但随着时间的推移会逐渐变慢。
- 如果将回调分配给.Net方法,则无关紧要。
(有一个服务器开关可以关闭所有回调。这就是我知道回调的问题)
- 慢速计算机使用Window 7 64位,但在其他计算机上配置相同。
- 同一域和网络上有慢速和快速的计算机
- 无论用户是本地管理员还是标准用户
都无关紧要
- 我监控了磁盘/网络活动,但慢速和快速之间没有区别
- 内存消耗没有明显差异
- 从WinDbg看了一下CLR内存,但没有发现什么奇怪的
我注意到的一些事情:
- 当回调很慢时,服务器进程使用100%CPU。
- 查看带有进程资源管理器的调用堆栈,服务器大部分时间都位于其中一个RPC Ndr *函数中,即NdrClientCall2。
我现在缺乏想法,需要一些帮助来解决这个问题。