2012-11-13 3 views
5

코어 7에 할당 된 .NET 스레드가 있습니다. 스레드 함수는 300ms에 한 번 트리거됩니다. 처음에는 하나의 호출을 실행하는 데 약 20-30ms가 소요됩니다. 그러나이 시간은 점차적으로 증가하여 약 52 만 건의 전화 후에 150ms 이상이됩니다.스레드가 프로세서 사용량을 점차적으로 늘립니다.

또한 코어 # 7의 사용이 10 %에서 시작한다는 것을 알고 있습니다. 스레드 기능 호출 수가 2,52,000 회가 될 때까지 코어 # 7의 프로세서 사용량은 약 60 %가됩니다. 스레드 기능을 트리거하는 것을 중지하면 프로세서 사용량이 0 %가됩니다. 그러나 다시 트리거를 시작하면 핵심 사용이 60 % (0 %가 아닌)에서 시작하여 다시 점차 증가합니다.

또한 응용 프로그램에 메모리 누수가 없음을 발견했습니다.

내 스레드 함수 내에서 두 사전의 요소를 결합하여 foreach 루프의 다른 사전에 추가하고 있습니다. 사전의 요소 수는 항상 45입니다.

이 응용 프로그램을 연중 무휴로 실행하고 싶습니다. 이 프로세서 사용을 일정하게 유지하기위한 몇 가지 팁을 알려주십시오.

+0

"사전의 요소 수는 항상 45 개가됩니다." 그것은 세 개의 사전 각각의 요소의 수입니까? 사전 중 어느 것도 성장하지 않는다고 확신합니까? 이것은'GetHashCode'를 올바르게 구현하지 않은 커스텀 키 타입을 사용하는 사전처럼 들립니다. –

+0

감사합니다. Jim Mischel, 아니요. 조합 된 사전의 최대 개수는 45이며, ​​45에 도달하면이 값이 삭제됩니다. 다른 두 사전의 최대 개수도 절대로 교차하지 않습니다. 내 사전은 으로 선언됩니다. 'Dictionary myResults = new Dictionary ; ' –

+0

그러면 코드를 보여줘야합니다. 스레딩 라이브러리가 이처럼 CPU 사용량을 증가시키는 것은 거의 없습니다. 코드에서 뭔가 더 가능성이 높습니다. –

답변

4

Dictionary에 항목을 추가 할 때 용량을 늘려야 할 수 있습니다. 당신의 사전은 영원히 계속 성장합니까? MSDN 가입일

:

카운트가 용량보다 작 으면,이 방법은 O (1) 동작에 접근한다. 새 요소를 수용하기 위해 용량을 늘려야하는 경우이 메서드는 O (n) 연산이됩니다. 여기서 n은 Count입니다.

+0

Thanks Jonathon Reinhart, 내 사전의 크기는 절대 45를 넘지 않습니다. –