2016-12-28 83 views
2

我正在開發一個c#多線程應用程序,因爲有些年份。幾天前我注意到,它在運行時會不斷創建新的工作線程(幾乎每秒一次)。使用Visual Studio 2013「線程」窗口這些線程具有無名稱和位置「不可用」,所以我無法檢查這些線程在哪裏啓動。 我給我的代碼中生成的所有線程的名稱,但仍然這些線程創建「無名」,所以我想他們可能會生成一個外部程序集。如何知道哪個方法啓動了一個工作線程

我的應用程序集成了NLog.dll(用於登錄txt文件),System.Data.SQLite.dll(用於數據讀取和寫入到db3數據庫)。它還使用UDP和TCP sokets進行數據交換。

例如: 運行應用程序2分鐘後,我有70個線程。然後,20分鐘後,線程數爲190!如果我在Visual Studio中檢查線程窗口,我發現所有具有「類別」「工作線程」和「名稱」的新線程都是「無名稱」。

這裏我的Visual Studio線程窗口的快照:

snapshot of my Visual Studio Threads window 任何人都可以建議我如何找到這個線程氾濫的由來? 在此先感謝!

+0

如果是不是在你的代碼中,你只能剝奪你的項目來找到根本原因(如果它是第三方庫)。另一種可能性是一些反病毒工具,它們會將.dll注入創建的進程中以檢查它們,有時甚至會發瘋,特別是在開發時。 – Oliver

回答

0

我會嘗試從SysInternals工具包(www.sysinternals.com/)進程監視器。 ProcMon有一個線程活動事件過濾器。

0

這種線程(名稱「無名」和位置是「不可用」)由Timer對象(在我的情況下爲System.Windows.Forms.Timer)創建。線程洪水是由下面這行代碼引起的:

timerUpdateStatus.Change(0, 0); 

,這是所謂的Tick事件處理程序,然後由另一調用重置了回到正確的價值Change方法:

timerUpdateStatus.Change(statusUpdateTime, 0); 
相關問題