2010-08-13 37 views
30

Ten prosty program rozpoczyna się od 15 wątków - zgodnie z liczbą. Czasami za jego życia spada kilka, ale wracają.Dlaczego ta prosta aplikacja konsolowa .NET ma tak wiele wątków?

class Program 
{ 
    static void Main(string[] args) 
    { 
     while (true) 
     { 
      Console.WriteLine(Process.GetCurrentProcess().Threads.Count); 
      Thread.Sleep(500); 
     } 
    } 
} 

Spodziewałem się proces po prostu mieć jeden wątek (a moja intuicja została poparta this)

bez debuggera, proces ma tylko (!) 4 wątki. Z pewnością wszystkie elementy CLR byłyby ukryte przed moim procesem?

Co to za liczba? Czy proces naprawdę ma tak wiele wątków? Czemu?

+0

Ile masz? –

+0

po prostu z ciekawości - kogo mam tutaj wygłaszać? wszyscy mają tę samą odpowiedź: D – obelix

+1

@obelix: jeśli wszyscy zasłużyli na przegraną, mógłbyś przegrać wszystkie. Twój rodzaj pytania powinien zostać zadany w MSO. – Richard

Odpowiedz

35

Spróbuj uruchomić go poza debuggerem (tzn. Naciśnij Ctrl + F5 zamiast F5). Powinieneś zobaczyć tylko trzy wątki - główny wątek, wątek GC & finalizatora wątku IIRC. Pozostałe wątki, które widzisz, to wątki związane z debuggerem.

+0

Tak, główny wątek, GC i finalizator są dokładnie tym, co zobaczysz. Jednak musisz A) uruchomić poza debuggerem i B) wyłączyć proces Visual Studio Hosting, który dodaje wątek lub dwa. – Tergiver

+0

czy masz link do artykułu msdn? –

+1

jest proces hostingu VS aktywowany, nawet jeśli jestem w trybie Release bez uruchamiania procesu przez VS? Nadal widzę 4 wątki ... –

5

Jeśli uruchomisz go bez dołączonego debuggera, istnieje znacznie mniej wątków. I to prawdopodobnie byłby wątek finalizatora i inne rzeczy CLR z domu.

4

Spróbuj uruchomić bez dołączonego debuggera (Visual Studio) (Ctrl + F5). Zobaczysz, że będzie mniej (prawdopodobnie 3) wątków. Większość tych wątków ma do czynienia z debuggerem.

5

Project + Properties, Debugging, untick "Włącz proces hostingu Visual Studio". Nie mogę odkryć, co robi. Gdy tylko zaznaczę opcję "Włączone niezarządzane debugowanie kodu", aby spróbować uzyskać podgląd tych wątków, nie będą one już uruchamiane. Bladego pojęcia. Ale jestem pewien, że to dla naszej korzyści :)

+1

Myślę, że proces hostingu daje debuggerowi szybsze paski, czy coś w tym stylu. –

+1

Uważam, że proces hostingu został zaprojektowany w celu przyspieszenia czasu uruchamiania w celu debugowania - podczas debugowania odpowiednie zestawy są ładowane do procesu vshost, a nie debuggery muszą nadal tworzyć/niszczą nowe procesy. –

+2

Nah, proces hostingu to niestandardowa wersja CLR hostowana. Głównie ze względów bezpieczeństwa. –

Powiązane problemy