2013-05-27 61 views
0

我開發了一個C#.Net windows服務,它是一個單獨的進程。在這裏我使用2個第三方Dll,一個用於ZIP(Ionic),另一個用於Excel(EPPlus)。單進程C#.Net windows服務在CPU資源監視器中顯示多個線程?

的.EXE的工作是:

  1. 讀取SDF文件
  2. 寫入自衛隊文件數據到SQL Server表
  3. 生成EXCEL
  4. 創建ZIP

同時監控這個資源監視器中的特定EXE顯示10個線程正在運行。

注:我沒有在這個應用程序中使用任何線程。

是OS使它10線程?如果是的話,如何和爲什麼?

+0

第三方API可能產生的線程 – PeskyGnat

+0

的來源如何,我可以得到證實?我在哪裏可以獲得EPPlus和Ionic的來源? – bapi

+0

我不確定你的開發環境是什麼樣子,但在VS 2010專業版中,當我'全部休息'並導航到Windows,線程時,我看到列在'位置'下的源代碼的完整列表。 – PeskyGnat

回答

0

相關:Why does this simple .NET console app have so many threads?

我將使用Visual Studio 2010中,增加了一個參考的滋生類似於第三方庫可以做一個線程的組件簡單的控制檯應用程序。

Windows服務可能有不同的調試技術,並可能有系統創建的各種附加線程運行。

簡單的控制檯

namespace ConsoleApplication1 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     ClassLibrary1.Class1.StartThread(); 
     while (true) 
     { 
     System.Threading.Thread.Sleep(1000); 
     System.Diagnostics.Trace.TraceInformation("test2"); 
     } 
    } 
    } 
} 
在單獨的類庫組件

簡單API,加入作爲參考控制檯項目

using System.Threading.Tasks; 

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
    public static void StartThread() 
    { 
     var t = new Task(() => { 
     while(true) 
     { 
      System.Threading.Thread.Sleep(1000); 
      System.Diagnostics.Trace.TraceInformation("test1"); 
     } 
     }); 
     t.Start(); 
    } 
    } 
} 
  1. 開始調試(F5)
  2. 從菜單調試,選擇'Break All'
  3. 從菜單調試,選擇Windows然後線程

下圖顯示:

  • 爲主線,這是控制檯應用程序
  • ClassLibrary1.Class1.StartThread.AnonymousMethod_0,這是引用的程序集開始線程。如果Ionic或第三方API啓動了一個線程,您可能會看到與其名稱空間相關的內容。

Break All Threads