我有一个使用COM的.net应用程序。在24-Cores服务器中以多线程模式运行时,它运行速度非常慢。但是,如果我将其更改为单线程模式,它会更快。起初我想使用带有SOS的windbg来查明是否存在锁定队列或某些使应用程序变慢的事情,但是!SOS扩展的syncblk为锁定对象返回全部0:喜欢
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
1 00000000 0 0 00000000 none 0 Free
2 0019e1c0 0 0 00000000 none 00bb1644 System.Diagnostics.Eventing.EventProvider+ClassicEtw+ControlCallback
3 00000000 0 0 00000000 none 0 Free
4 00000000 0 0 00000000 none 0 Free
5 00000000 0 0 00000000 none 0 Free
6 00000000 0 0 00000000 none 0 Free
7 00000000 0 0 00000000 none 0 Free
8 00000000 0 0 00000000 none 0 Free
9 00000000 0 0 00000000 none 0 Free
10 00000000 0 0 00000000 none 0 Free
11 0019e394 0 0 00000000 none 00d2f2fc Bid+CtrlCB
12 0019e3c8 0 0 00000000 none 00c38b7c System.__ComObject
13 0019e3fc 0 0 00000000 none 00c38bbc System.__ComObject
14 00000000 0 0 00000000 none 0 Free
.........
11303 460e30a4 0 0 00000000 none 5d42530c System.__ComObject
11304 460e3070 0 0 00000000 none 5d423f64 System.__ComObject
有人告诉我,SOS不适合COM,而我认为COM是由.net框架使用RCW包装的,RCW是完全管理的对象。但是,我对任何东西或工具持开放态度,是否有人知道!syncblk或其他工具的结果存在问题?
PS:我使用的是进程内MTA COM服务器。大多数情况下,我使用COM对象作为接口,但我经常调用COM过程,并且在多线程模式下性能非常差。