2017-02-13 13 views
-2

私は現在、過度の使用中にUIの吃音を経験するアプリケーションを正常にチェックしています。アプリケーションの短命スレッドの起源

Visual Studio 2015用の拡張子Microsoft Concurrency Visualizerを使用すると、約100msの実行後に非常に多くの短命スレッドが作成され、停止することがわかりました。 残念なことに、表示されるコールスタックはclr.dll!0x98071ntdll.dll!0x634fbのようなものであり、有用な情報をどのように抽出するのかよく分かりません。

私はこれらのスレッドの目的は何か、アプリケーションのコードのどの部分がそれらを作成しているのか分からない。

どのように起動するのが良いかを確認するにはどうすればよいですか?コードで

、私は仕事の一握り、QueueUserWorkItemsの他、平野スレッドのインスタンスの数十、いくつかのSystem.Threading.Timer &でSystem.Timers.Timer、無反応性の拡張機能をgrepすることができました。私はそれらのすべてのブレークポイントを置くが、私はいくつかが不足しているようだ...

私はそれらがスレッドのプールからのものだとは思わない彼らは同期のビジュアライザではなく、後で別のIDを持つものが作成されます。しかし、私は誤解を招くかもしれない。

また、いくつかのサードパーティのライブラリとJuggerNETで生成されたコードを使用しているため、アプリケーション自体にも原点がありません。

+1

これは盲目的な推測ですが、おそらくGCスレッドですか? – Talonj

+0

ありがとうございました。 [Fundamentals of Garbage Collection](https://msdn.microsoft.com/en-us/library/ee787088(v)によると、それを引き起こしたスレッドを実行するGCは新しいスレッドを生成しません) = vs.110).aspx)? (私はが有効になっているbtwを持っていません) –

+1

投稿のコメントではなく、コメントにコメントを入れてください - ほとんどの読者はサインインや投票をしないので、ほとんどの読者にとって興味がありません。私は個人的には、とにかく仕事を下降させないよう訴えるとは思わない。 – halfer

答えて

0

私は最終的に、たとえば含ま不可解なコールスタックの一部をよく見ることで、これらの短命のスレッドの犯人を見つけることができた:

mmdevapi.dll 
wdmaud.drv 
avrt.dll 
audioses.dll 

それは私がチェックを倍増する必要があることを考えに私を導きました警報システム。これは確かにこれらのスレッドを生み出したものでした。

注:

私は誰かがより良いプロセスまたは不要なスレッドの起源を診断するためのヒントやトリックの任意の種類を共有したいと思いますので、私はしかし、私の答えを受け入れることはありません。

関連する問題