2012-10-13 12 views
20

quindi ho una abbastanza semplice console app:Discussioni multiple gratuite?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.ReadKey(); 
    } 
} 

ho costruito con configurazione di rilascio. Quando lo eseguo e apro il task manager, lo vedo che lo ha 4 thread. Perché questo sta accadendo anche se non sto creando alcun thread?

Questo non può essere ogni applicazione. Ho provato ad aprire il blocco note e ha solo 1 thread. Anche se è un'app nativa e la mia app per console è gestita.

Qualche idea?

+0

Hai sempre almeno 1 thread per GC + il thread principale. – driis

risposta

17

immagino le discussioni che si vedono sono:

  1. Il thread principale
  2. Il finalizzatore °. leggi
  3. In-process debugger helper thread
  4. La sequenza di GC concomitante.

This post dettagli alcuni dei thread CLR speciali.

+0

+1, link molto bello a un post sul blog – sll

+0

Grazie per i collegamenti. Risorse eccellenti! – Aniket

6

Questi sono i thread di .NET Framework creati per un'applicazione, è possibile utilizzare la finestra di debug dei thread di Visual Studio 2010 per vedere quali thread appartengono a un'applicazione nella domanda.

appena creato un'applicazione console base con il metodo principale vuoto e possiamo vedere che 8 thread sono stati creati:

enter image description here

vedi la discussione interessante per quanto riguarda le discussioni interne CLR qui: The CLR's internal threads

BTW, blocco note non è un'applicazione .NET Framework

+0

Lo so, quindi è impossibile creare un'unica app .NET con threading? – Aniket

+0

Credo di no dal momento che non hai questo controllo.Il comportamento del framework NET si sta chiedendo se qualcuno conosce un modo per farlo, sto parlando di applicazioni gestite, non sono sicuro di non gestito – sll

+0

Posso confermare che un'applicazione nativa (C/C++) ha solo un thread. Ho appena provato. – Aniket

3

.NET Framework avvia sempre alcuni thread all'inizio di un programma:

  1. tuo thread principale (ovviamente)
  2. filo Garbage Collection
  3. filo JIT.
1

C'è una differenza fondamentale tra una normale applicazione COM e un'applicazione gestita. Questa è la raccolta dei rifiuti.

Ad ogni processo è associato un thread finalizzatore, in modo che i finalizzatori nell'applicazione vengano eseguiti solo su quella discussione.

Così i fili sono: 1. Discussione principale (che l'applicazione ha creato) 2. Finalizer Discussione (usato da garbage collector 3. JIT Discussione (utilizzato per il codice JIT su fly)

Il. altri thread possono essere SysEvents ecc