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