2016-12-28 27 views
2

私は数年来、C#マルチスレッドアプリケーションを開発しています。数日前、私は実行中に、新しいワーカースレッド(ほぼ1秒に1回)を連続的に作成することに気付きました。 Visual Studio 2013の「スレッド」ウィンドウを使用すると、これらのスレッドには名前と場所が「使用できません」と表示されるため、これらのスレッドの開始位置を確認することはできません。 私のコードで生成されたすべてのスレッドに名前を付けましたが、これらのスレッドは "名前なし"で作成されているため、外部アセンブリによって生成される可能性があります。どのメソッドがワーカースレッドを開始したかを知る方法

私のアプリケーションは、NLog.dll(txtファイルへのログ用)、System.Data.SQLite.dll(データ用のdb3データベースへの読み書き)を統合しています。また、データ交換のためにUDPとTCPソケットを使用します。

例: 実行中のアプリケーションの2分後に、私は70スレッドを持っています。その後、20分後にスレッドの数は190です!私がVisual Studioでスレッドウィンドウをチェックすると、新しいスレッドがすべて「カテゴリ」「ワーカースレッド」で「名前」が「名前なし」であることがわかります。ここで

私のVisual Studioスレッドウィンドウのスナップショット:

snapshot of my Visual Studio Threads window は、誰もが氾濫このスレッドの起源を見つけるために、どのように私をお勧めすることはできますか? ありがとうございます!

+0

Tickイベントハンドラで呼び出され、その後Change方法に別のコールバック正しい値にresettedた

timerUpdateStatus.Change(0, 0); 

あなたのコードではなく、根本的な原因を見つけるためにプロジェクトを細分化するだけです(サードパーティのライブラリの場合)。もう1つの可能性は、アンチウイルスツールで、.dllを作成されたプロセスに挿入してチェックしたり、開発中に怒ったりすることがあります。 – Oliver

答えて

0

SysInternalsツールキット(www.sysinternals.com/)からProcess Monitorを試してみます。 ProcMonには、スレッドアクティビティイベント用のフィルタがあります。

0

Timerオブジェクト(この場合はSystem.Windows.Forms.Timer)によってこの種のスレッド(名前が「名前なし」および「場所が使用できません」)が作成されます。スレッドの洪水は、このコード行によって引き起こされた:それはある場合

timerUpdateStatus.Change(statusUpdateTime, 0); 
関連する問題