2012-08-14 63 views
-2

我已經試過了我能想到的一切,我即將準備拉我的頭髮了。我有與使用的TcpClient,的NetworkStream,StreamWriter的和StreamReader的調制解調器通信的應用程序。調制解調器每小時只接受一個連接,所以我必須打開連接。我剛切換到一個新的調制解調器,幾個小時後顯然停止通信,但保持其網絡連接打開。我已經設置了NetworkStream.ReadTimeout和NetworkStream.WriteTimeout屬性1000毫秒,但代替的StreamWriter超時當調制解調器停止通信它只是開始使用我的電腦的CPU的50%。沒有無限循環,它停在我的代碼中的一個StreamWriter.WriteLine()上。任何幫助是極大的讚賞。C#的StreamWriter使用50%的CPU

+0

聽起來像一個驅動程序的問題我 – 2012-08-14 17:40:18

+6

,你可以請提供代碼,可能是BUG,可能是環境 – GSerjo 2012-08-14 17:43:16

回答

2

某處,甚至在代碼中你只使用,但沒有寫,有一個循環,看起來是這樣的:

while (condition) 
{ 
    condition = checkCondition(); //possibly looking for new data from the socket 
} 

你有雙核電腦,該環形從一個核心中消耗了所有的CPU時間。解決這個問題的最簡單方法是睡眠調用添加到循環:

while (condition) 
{ 
    Thread.Sleep(100); 
    condition = checkCondition(); 
} 

但同樣,這個代碼可以被隱藏在一個函數中調用你使用,你不能改變它。如果是這樣的話,你可能需要看看你正在使用的類和發現的等待,不依賴於問題的功能數據的另一種方法。

你可以找出哪些功能是通過在運行開溜您的應用程序引起的問題,等待它達到問題狀態,並暫停執行。通過程序稍微一點,它應該變得相當明顯,你的問題。

+0

謝謝你的答覆。事實證明,這個問題是System.IO.StreamWriter的內部問題。我創建了自己的StreamWriter.Write方法,它解決了這個問題。 – DWCP 2012-08-16 21:16:37