2010-07-22 3 views
0

안녕하세요,많은 CPU (VB.NET)를 사용하는 Windows 서비스

Google 서버에 하루에 한 번 TCP 패킷을 보내는 장치가 현장에 있습니다. 나는 그 패킷을 끊임없이 경청하는 Windows 서비스를 가지고있다. 이 서비스의 코드는 MSDN 예제 (Asynchronous Server Socket Example)의 카본 카피입니다. 구현시 유일한 차이점은 아무 것도 보내지 않습니다. 단지 데이터를 받아 처리하고 소켓을 닫습니다. 이 서비스는 위에서 링크 된 코드를 즉시 처리하는 스레드를 시작합니다.

문제점은 내가 실행중인 서버의 작업 관리자로 이동했을 때 서비스가 항상 모든 CPU를 사용하는 것으로 보입니다 (99라고 표시됨). IT 부서에이를 통보 받았습니다. 하지만 그 CPU주기가 사용되는 이유를 모르겠다. 스레드가 allDone.WaitOne()에서 막 그냥 차단합니까?

나는 또한 동일한 코드로 콘솔 애플리케이션을 만들었고 데이터가 처리 될 때만 CPU를 사용하여 잘 작동합니다. 각각의 경우에 작업이 매번 성공적으로 완료되지만 서비스 구현은 매우 비효율적 인 것처럼 보입니다. 내가 여기서 뭘 잘못 할 수 있니?

감사합니다.

+1

그 샘플에는 CPU를 사용하는 것이 없으므로 코드를 직접 게시해야합니다. 또한 디버거를 사용하여 서비스에 연결하고 Ctrl + F5를 누르는 것이 좋습니다. 그러면 실행이 중단되고 즉시 실행중인 코드가 표시됩니다. –

답변

1

프로파일 러를 사용하여 CPU 사용량을 확인하십시오. 그것은 당신의 첫번째 일 이었음에 틀림 없습니다 - 프로파일 러는 프로그래머를위한 주요 도구 중 하나입니다.

코드의 어떤 부분이 CPU를 불어 넣는지를 정확하게 알려줍니다.

코드 btw.가 ​​끔찍한 것처럼 보입니다. 예를 들어, 비동기 코텍을 사용하는 방법과 같이 멀티 연결 서버에 적합한 아키텍처와는 다릅니다. 유감스럽게도, 당신은 아마도이 문장을 다시 써야 할 것입니다.

관련 문제