2010-08-13 15 views
30

Bu basit program, 15 iş parçacığı ile başlar - sayıma göre. Bazen ömrü boyunca bir kaç tane düşer, ama geri gelirler.Bu basit .NET konsol uygulaması neden bu kadar çok iş parçacığına sahip?

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

Ben ayıklayıcıya olmadan

süreç sadece bir iş parçacığı olması bekliyordum (ve benim sezgi this tarafından yedeklenen), proses sahip tek (!) 4 konuları. Elbette, herhangi bir CLR parçası benim sürecimden gizlenecek mi?

Bu ne anlama geliyor? İşlem gerçekten çok fazla iş parçacığına sahip mi? Niye ya?

+0

Kaç tane var? –

+0

sadece meraktan yoksun - kimi buraya yakardım? Herkesin aynı cevabı var: D – obelix

+1

@obelix: eğer hepsi bir coşkuyu hak ediyorlarsa, hepsini de alabilirsin. MSO'da sorunuzu sormalısınız. – Richard

cevap

35

Hata ayıklayıcı dışında çalıştırmayı deneyin (örn. F5 yerine Ctrl + F5 tuşlarına basın). Sadece üç parçacığı görmelisiniz - ana iplik, GC dişi & sonlandırma ipliği IIRC. Gördüğünüz diğer başlıklar, hata ayıklayıcı ilişkili iş parçacıklarıdır.

+0

Evet, ana iş parçacığı, GC ve sonlandırıcı, tam olarak göreceğiniz şeydir. Ancak, A) hata ayıklayıcısının dışında çalışmanız gerekir ve B) bir iş parçacığı veya iki tane ekleyen Visual Studio Barındırma İşlemi'ni kapatın. – Tergiver

+0

msdn makalesinin bağlantısı var mı? –

+1

, VS aracılığıyla süreci çalıştırmadan Serbest modda olmama rağmen VS barındırma sürecini etkinleştirdi mi? Hala 4 iş parçacığı görüyorum ... –

5

Bir hata ayıklayıcısı eklenmeden çalıştırırsanız, önemli ölçüde daha az iş parçacığı vardır. Ve bunlar muhtemelen sonlandırıcı ipliği ve diğer evde tutulan CLR eşyasıydı.

4

Hata ayıklayıcı (Visual Studio) eklenmeden çalıştırmayı deneyin (Ctrl + F5). Daha az (muhtemelen 3) iş parçacığı olacağını göreceksiniz. Bu parçacıkların çoğu hata ayıklayıcı ile ilgisi var.

5

Proje + Özellikler, Hata ayıklama, "Visual Studio barındırma işlemini etkinleştir" seçeneğini işaretleyin. Ne yaptığını anlayamıyorum. Bu iş parçacıklarına bir göz atmaya çalışmak için "Etkin yönetilmeyen kod hata ayıklama" seçeneğini işaretlediğimde, artık başlamıyorlar. İpucu yok. Ama eminim bu bizim yararımız için :)

+1

Barındırma işleminin hata ayıklayıcısına daha hızlı çizgiler ya da bunun gibi bir şey vereceğini düşünüyorum. –

+1

Hosting işleminin hata ayıklama için daha hızlı başlatma süreleri sağlamak üzere tasarlandığına inanıyorum - hata ayıkladığınızda, ilgili derlemeler, hata ayıklayıcısına yeni süreçler oluşturmaya/yok etmeye çalışmak yerine vshost işlemine yüklenir. –

+2

Hayır, barındırma işlemi CLR'nin özel olarak barındırılan bir sürümüdür. Çoğunlukla güvenlik amaçlı. –

İlgili konular