У меня есть приложение .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-процедуры, и производительность в многопоточном режиме очень низкая.