2012-10-13 47 views
20

Vì vậy, tôi có đủ giao diện điều khiển ứng dụng đơn giản:Nhiều chủ đề miễn phí?

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

tôi đã xây dựng nó với cấu hình phát hành. Khi tôi chạy nó và mở trình quản lý tác vụ, tôi thấy nó có 4 luồng. Tại sao điều này xảy ra mặc dù tôi không tạo ra bất kỳ chủ đề nào?

Đây không thể là từng ứng dụng. Tôi đã thử mở notepad và nó chỉ có 1 thread. Mặc dù đây là ứng dụng gốc và ứng dụng bảng điều khiển của tôi được quản lý.

Bất kỳ ý tưởng nào?

+0

Bạn luôn có ít nhất 1 chủ đề cho GC + chủ đề chính của bạn. – driis

Trả lời

17

tôi tưởng tượng đề bạn đang nhìn thấy là:

  1. Các chủ đề chính
  2. Các finalizer thứ. đọc
  3. In-process debugger helper thread
  4. Chuỗi GC đồng thời.

This post chi tiết một số chủ đề CLR đặc biệt.

+0

+1, liên kết rất đẹp đến bài đăng blog – sll

+0

Cảm ơn bạn đã liên kết. Tài nguyên tuyệt vời! – Aniket

6

Đây là các chủ đề .NET Framework được tạo cho một ứng dụng, bạn có thể sử dụng cửa sổ gỡ lỗi chủ đề Visual Studio 2010 để xem chủ đề nào thuộc về một ứng dụng theo câu hỏi.

Chỉ cần tạo ra một ứng dụng giao diện điều khiển cơ bản với phương pháp chính có sản phẩm nào và chúng tôi có thể thấy rằng 8 chủ đề được tạo:

enter image description here

Xem thảo luận thú vị về CLR đề nội bộ ở đây: The CLR's internal threads

BTW, notepad không phải là ứng dụng .NET Framework

+0

Tôi biết, vì vậy không thể tạo một ứng dụng .NET đơn luồng? – Aniket

+0

Tôi tin rằng không có kể từ khi bạn không có quyền kiểm soát như vậy.Hành vi của NET Framework chỉ tự hỏi liệu có ai biết cách làm điều này không, tôi đang nói về các ứng dụng được quản lý, không chắc chắn về không được quản lý – sll

+0

Tôi có thể xác nhận rằng ứng dụng gốc (C/C++) chỉ có một luồng. Chỉ cần thử nó ra. – Aniket

3

.NET Framework luôn bắt đầu một số luồng ở đầu chương trình:

  1. chủ đề chính của bạn (rõ ràng)
  2. Thu gom rác chủ đề
  3. JIT chủ đề.
1

Có một sự khác biệt cơ bản giữa ứng dụng COM thông thường và Ứng dụng được quản lý. Đây là bộ sưu tập rác.

Mỗi quy trình có một Chuỗi kết thúc được kết hợp với nó, sao cho Trình tổng kết trong ứng dụng của bạn chỉ chạy trên Chủ đề đó.

Vì vậy, các Chủ đề là: 1. Main Thread (mà ứng dụng của bạn đã tạo) 2. finalizer Thread (được sử dụng bởi nhà sưu tập rác 3. JIT Chủ đề (được sử dụng để mã JIT trên fly)

Các. chủ đề khác có thể SysEvents, vv