20

だから私は十分にシンプルなコンソールアプリを持っています:

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

リリース構成でビルドしました。それを実行してタスクマネージャーを開くと、4つのスレッドがあることがわかります。スレッドを作成していないのに、なぜこれが発生するのですか?

これは、各アプリケーションである可能性はありません。メモ帳を開いてみましたが、スレッドが1つだけです。ネイティブアプリであり、コンソールアプリは管理されていますが。

何か案は?

4

4 に答える 4

17

あなたが見ているスレッドは次のとおりです。

  1. メインスレッド。
  2. ファイナライザースレッド
  3. インプロセスデバッガヘルパースレッド
  4. 並行GCスレッド。

この投稿では、いくつかの特別なCLRスレッドについて詳しく説明します。

于 2012-10-13T22:01:09.797 に答える
6

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

空のmainメソッドを使用して基本的なコンソールアプリケーションを作成したところ、8つのスレッドが作成されたことがわかります。

ここに画像の説明を入力してください

ここでCLR内部スレッドに関する興味深い議論を参照してください:CLRの内部スレッド

ところで、メモ帳は.NETFrameworkアプリケーションではありません

于 2012-10-13T21:42:02.337 に答える
3

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

  1. あなたのメインスレッド(明らかに)
  2. ガベージコレクションスレッド
  3. JITスレッド。
于 2012-10-13T21:51:46.700 に答える
1

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

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

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

他のスレッドはSysEventsなどです。

于 2012-10-13T21:53:21.393 に答える