有没有办法找出COM相关争用像.NET应用程序中的Marshal que

时间:2012-02-20 04:50:45

标签: .net com locking windbg

我有一个使用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过程,并且在多线程模式下性能非常差。

0 个答案:

没有答案