Mam aplikację WCF hostowaną w IIS (napisaną w C#/.Net 4
). Z biegiem czasu liczba uchwytów procesu rośnie w sposób mniej lub bardziej liniowy (wzrasta nawet 30 000, zanim proces zostanie ponownie przetworzony). Według SysInternals Process Explorer, większość uchwytów, które proces ma, jest typu Thread
. Jednak według Monitora wydajności liczba wątków pozostaje mniej więcej stała (około 40)."Wycieki" Uchwyty gwintów
Najwyraźniej robię coś nie tak i jestem ciekawy Thread Handles
. Jednak nie wiem dokładnie, co to jest Thread Handle
w tym kontekście. Założę się, że jest to uchwyt do wątku, ale ponieważ liczba wątków pozostaje spójna, nie widzę, aby liczba uchwytów stale rosła. I, nie mogę wymyślić żadnego sposobu, aby utrzymać uchwyt do wątku, podczas gdy sam wątek znika. Co więcej, nie tworzę jednoznacznie nowych wątków (w niektórych miejscach używam ThreadPool
).
Najwyraźniej brakuje mi czegoś. Ale co?
Czy masz usługę WCF jako SingleInstance, PerCall lub Session? Czy używasz tam kontenera IoC? – Jordi
Czy zarządzasz wątkami samodzielnie lub czy używasz puli wątków? Jakiego rodzaju wątków używa twoja aplikacja (czy mówimy o wątkach, które robi IIS -> ograniczone przez sam IIS, czy własne wątki)? – Rafa
Usługa WCF jest pojedynczą instancją i wieloma współbieżnościami. Brak kontenera IOC. –