2012-08-14 4 views
-2

저는 생각할 수있는 모든 것을 시도했으며, 제 머리카락을 꺼낼 준비가되었습니다. TCPClient, NetworkStream, StreamWriter 및 StreamReader를 사용하여 모뎀과 통신하는 응용 프로그램이 있습니다. 모뎀은 한 시간에 한 번만 연결을 허용하므로 연결을 열어 두어야합니다. 방금 몇 시간 후에 통신을 중지하지만 네트워크 연결을 열어 놓은 새 모뎀으로 전환했습니다. NetworkStream.ReadTimeout 및 NetworkStream.WriteTimeout 속성을 1000ms로 설정했지만 모뎀이 통신을 중지 할 때 StreamWriter 시간 초과 대신 단순히 컴퓨터의 CPU 사용량을 50 %로 시작합니다. 무한 루프가 없습니다, 내 코드에서 단일 StreamWriter.WriteLine()에서 중지됩니다. 어떤 도움이라도 대단히 감사합니다.C# StreamWriter는 50 %의 CPU를 사용합니다.

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

당신은 듀얼 코어 컴퓨터를 가지고 있고,이 루프 :

+0

나에게 드라이버 문제와 같은 소리가납니다 –

+6

코드를 제공해주십시오. 버그 일 수 있습니다. 환경이있을 수 있습니다. – GSerjo

답변

2

어딘가에는, 어쩌면 당신은하지만, 작성하지 않은 사용하는 경우에도 코드에서 다음과 같이 보입니다 루프가 한 코어에서 모든 CPU 시간을 먹어 치우고 있습니다. 이 문제를 해결하는 가장 쉬운 방법은 루프에 잠 호출을 추가하는 것입니다

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

그러나 다시,이 코드는 함수에 숨겨져있을 수 있습니다 당신이 그것을 변경할 수있는 당신이 사용하고있는 전화. 그렇다면 사용중인 클래스를 살펴보고 문제가되는 함수에 의존하지 않는 데이터를 기다리는 다른 방법을 찾아야 할 수 있습니다.

버그 태그에서 앱을 실행하고 문제 상태에 도달 할 때까지 기다렸다가 실행을 일시 중지하면 문제를 일으키는 기능을 알 수 있습니다. 프로그램을 단계적으로 실행하면 문제가있는 곳에서 상당히 명확 해집니다.

+0

감사합니다. 문제는 System.IO.StreamWriter 내부에있는 것으로 나타났습니다. 내 자신의 StreamWriter.Write 메서드를 만들었고 문제가 해결되었습니다. – DWCP

관련 문제