2010-07-22 20 views
0

HI的,Windows服務使用了大量CPU(VB.NET)

我們有上發送TCP數據包到我們的服務器每天一次現場的設備。我有一個不斷監聽這些數據包的Windows服務。服務中的代碼幾乎是來自MSDN示例(Asynchronous Server Socket Example)的抄送副本 - 唯一的區別是我們的實現不會發回任何內容。它只接收,處理數據並關閉套接字。該服務只是啓動一個線程,立即解決上面鏈接的代碼。

問題是,當我得到它運行的服務器的任務管理器時,該服務似乎一直在使用所有的CPU(它表示99)。我被IT通知了這件事。但我不明白那些CPU週期正在使用什麼,線程只是在allDone.WaitOne()上阻塞了嗎?

我也用相同的代碼創建了一個控制檯應用程序,並且工作得很好,即僅在處理數據時使用CPU。每種情況下的任務都是每次都成功完成,但從外觀來看,服務實現效率非常低。我在這裏做錯了什麼?

謝謝。

+1

由於該示例中沒有任何內容會使用CPU,因此您必須發佈自己的代碼。我還建議你用調試器附加到服務上,然後按下Ctrl + F5 - 這會中斷執行,你會立即看到正在執行的代碼。 – 2010-07-22 05:32:46

回答

1

使用探查器找出你的CPU花費在哪裏。這應該是你的第一個經驗 - 配置文件是程序員的主要工具之一。

它幾乎可以準確地告訴你哪部分代碼吹到了CPU。

該代碼,btw。,看起來很糟糕。就像一個例子,如何使用異步機制,而不是多連接服務器的良好體系結構。很抱歉地說,你可能不得不重寫這個。