私は、約5つのウィンドウを持ち、Xceed Data Gridを使用する新しいWPFアプリケーションを作成しました。タスクマネージャーを調べた後、私はこの小さなアプリケーションが19スレッドを実行していることがわかりました。19 WPFアプリケーションのスレッド
これは正しいですか?私はWPFフレームワークが2-3スレッドを使用することを期待しましたが、19では使用できませんでした。 または何か間違っていますか?実行している場合
私は、約5つのウィンドウを持ち、Xceed Data Gridを使用する新しいWPFアプリケーションを作成しました。タスクマネージャーを調べた後、私はこの小さなアプリケーションが19スレッドを実行していることがわかりました。19 WPFアプリケーションのスレッド
これは正しいですか?私はWPFフレームワークが2-3スレッドを使用することを期待しましたが、19では使用できませんでした。 または何か間違っていますか?実行している場合
まず、それは
19ではないの "Hello、World!" というWPFアプリ、私はタスクマネージャで10スレッドを参照してください。 Visual Studioデバッガを使用して同じアプリケーションを実行すると、19が使用されます。まず、これらのうち9つをデバッガからオーバーヘッドとして追加します。
ここ1です。
"Build More Responsive Apps With The Dispatcher"と呼ばれるMSDNマガジンの記事によると、WPFは、二つのスレッドで始まり:
すべてのWPFアプリケーションは、ユーザ・インタフェースを管理するためのと1をレンダリングするための 二つの重要なスレッド、1から始めます。レンダリングスレッド は、背景が で実行される隠されたスレッドなので、通常 で対処する唯一のスレッドはUI スレッドです。
しかしthis articleによると、すべての管理対象のアプリケーション、WPFやないで基本的なスレッドがたくさんあります:
.NET スレッドのさまざまな種類があります:ファイナライザ、GC、デバッガ、 タイマーが、スレッドプール、プライマリ、 バックグラウンドスレッド。ただし、.NETに関連するスレッドはすべて であるとは限りません。 WPFからを皮切り
、まで取得するには、GCとファイナライザに追加します。デバッガスレッドを追加してください(デバッグしていなくても、すべての管理対象アプリケーションに1つあります)5つのになります。タイマを追加しての6つをにします。
VSの外で起動した後でWPFアプリケーションにデバッガを接続すると、スレッドプールにワーカースレッドが2つあることがわかります。これはおそらく最小です。これは、の8つのまで私のアプリを取得します。
私は正確には説明できませんが、interopのCOMスレッド(おそらく管理スレッドではありません)があります。参照したsecond articleでは、これらの詳細について説明します。
しかし、ここの物語の本質は、心配しないことです。バニラ "こんにちは、世界!"アプリはあなたのベースラインである10を使用します。 この最小値を超えて作成するスレッドについてのみ心配してください。
これは、どのWindowsアプリケーションとでも同じです。フォームを表示している場合、10はほぼ最小です。 –
フォームには10個のスレッドが必要ですか?メッセージポンプ用に1つ必要です。他の9は何ですか? –
それは非常に奇妙に聞こえる。私はバックグラウンドワーカーなどのための追加スレッドを持つ通常のアプリケーションのための2つのスレッドが期待されるが、19。 –