Есть ли способ выяснить конфликт, связанный с COM, как Marshal que в приложении .NET - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть приложение .net, которое использует COM.Когда он работает в многопоточном режиме на 24-ядерном сервере, он работает очень медленно.Но если я переключу его в однопоточный режим, это будет намного быстрее.Сначала я хочу использовать windbg с SOS, чтобы выяснить, есть ли очередь блокировки или что-то, что замедляет работу приложения, но! Syncblk расширения SOS возвращает все 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 Framework с использованием RCW, который является полностью управляемым объектом.Как бы то ни было, я открыт для всего или для инструментов, знает ли кто-нибудь проблему с результатом! Syncblk, или каким-то другим инструментом?

PS: я использовал встроенный COM-сервер MTA.В основном я использую COM-объекты в качестве интерфейсов, но я очень часто вызываю COM-процедуры, и производительность в многопоточном режиме очень низкая.

...