2012-10-13 6 views
20

は、だから私は、単純な十分なコンソールアプリケーションを持っています。それを実行してタスクマネージャを開くと、 には4つのスレッドがあります。私はスレッドを作成していないのになぜこれが起こっていますか?複数のスレッドを無料で使用できますか?私は、リリース構成でそれを構築した</p> <pre><code>class Program { static void Main(string[] args) { Console.ReadKey(); } } </code></pre> <p>:

これはおそらくそれぞれのアプリケーションではありません。メモ帳を開こうとしましたが、スレッドは1つしかありません。それはネイティブアプリであり、私のコンソールアプリは管理されています。

アイデア?

+0

GC +メインスレッドには常に1つ以上のスレッドがあります。 – driis

答えて

17

をすることができます:

  1. メインスレッド
  2. ファイナライザ番目。読み取り
  3. In-process debugger helper thread
  4. 同時GCスレッドです。

This post詳細は、特殊なCLRスレッドの一部です。

+0

+1、ブログ投稿へのリンクが非常にいい – sll

+0

リンクありがとうございます。優れたリソース! – Aniket

6

これらはアプリケーション用に作成された.NET Frameworkスレッドです。Visual Studio 2010スレッドデバッグウィンドウを使用して、そのスレッドのアプリケーションに属するスレッドを確認できます。

はちょうど空のmainメソッドを持つ基本的なコンソールアプリケーションを作成し、我々は、8つのスレッドが作成されたことがわかります。ところでThe CLR's internal threads

、メモ帳:

enter image description here

はCLR内部ここのスレッドに関する興味深い議論を参照してください。 .NET Frameworkアプリケーションではありません

+0

私は知っているので、単一のスレッド.NETアプリケーションを作成することは不可能ですか? – Aniket

+0

あなたはそのような支配権を持っていないので、私は信じていません。NET Frameworkの動作だけで誰もこれを行う方法を知っているかどうか、私は管理されていないアプリケーションについて話している、アンマネージドについてはわからない – sll

+0

私はネイティブアプリ(C/C + +)が単なるスレッドを持っていることを確認することができます。ちょうどそれを試しました。 – Aniket

3

.NET Frameworkは、プログラムの開始時に常にいくつかのスレッドを開始します。

  1. あなたのメインスレッド(明らかに)
  2. ガベージコレクションスレッド
  3. JITスレッド。
1

通常のCOMアプリケーションと管理対象アプリケーションには基本的な違いがあります。これはガベージコレクションです。

各プロセスには、アプリケーション内のファイナライザがそのスレッドでのみ実行されるように、ファイナライザスレッドが関連付けられています。

ので、スレッドは、次のとおりです。(あなたのアプリケーションが作成した) 1.メインスレッドガベージコレクタによって使用さ 2.ファイナライザスレッド(オンザフライJITコードに使用 3. JITスレッド()

他のスレッドがSysEventsなど私はあなたが見ているスレッドを想像

関連する問題

 関連する問題