2009-11-23 3 views
1

특정 작업이 분할되어 여러 스레드에서 실행되는 C# 프로젝트를 시작합니다. 가능한 한 효율적으로 실행되도록 최대한 많은 도구를 찾고 있습니다. 따라서 자원 (CPU) 사용, 차단, 교착 상태, 작업 대기중인 스레드 등을 감시하고 싶습니다. 서로 다른 접근 방식을 비교하여 다른 조건에서 가장 잘 작동하는 방식을 비교할 수 있기를 원합니다.다중 스레드 .NET 응용 프로그램을 모니터링하기위한 도구, 팁 및 트릭

또한 Perfmon 카운터가 스레딩 모델을 최적화하고 비교하는 데 다소 유용하다는 것을 알고 싶습니다.

나는 또한 값 비싼 물건을 구입할 여유가 없으므로 무료입니다.

이것은 .NET 3.5에서 VS 2008로 프로젝트입니다 (스레딩에 대한 도움이 더 필요하다면 VS 2010 베타를 사용할 수는 있지만).

감사합니다.

편집 : Perfmon 권장 사항뿐만 아니라 프로덕션 환경에서 응용 프로그램을 모니터링하고 싶을 때 사용할 수있는 다른 도구를 확실히 찾고 있습니다. 따라서 디버깅 도구가 필요하지만 비 디버그 환경을위한 도구도 필요합니다. 고마워.

멀어져 편집 :

답변

1

로거 클래스를 만들고 내 코드를 계측하여 스레드가 시작 및 중지되고 내부 프로세스의 경과 시간을 측정 할 때 catch 할 수있는 최상의 결과를 얻었습니다. 여기에 언급 된 바와 같이 메모리로드를 캡처하기 위해 다양한 .Net 라이브러리를 사용할 수도 있습니다 : How to get memory available or used in C#.

대기열, 데이터베이스 (System.Data.Sqlite는 이것에 아주 좋습니다) 및 파일에 기록했습니다. 별도의 스레드에있는 로거와 함께 공동 큐 -> 데이터베이스. 이는 로그가 실행되는 동안 로그를 모니터링 할 수 있고 작은 Windows 응용 프로그램을 통해 별도의 제어 테이블을 통해 로그 정보를 제어 할 수 있기 때문에 멀티 스레드 Windows 서비스에 특히 유용합니다. sys 관리자조차도 쉽게 사용할 수 있습니다.

많은 추가 작업이 아니며 배포하면 항상 사용할 수 있습니다.

3

실제로 비주얼 스튜디오 2010 좋은 방법입니다 : http://www.danielmoth.com/Blog/2009/05/parallel-tasks-new-visual-studio-2010.html

+0

와우. 잘됐다. 한 가지 질문에 답하십시오 : 2010 년에는 이전 VS 버전과 마찬가지로 2008 년부터 프로젝트를 "업그레이드"해야합니까? – goheen

+0

여기를 참고하십시오 : http://stackoverflow.com/questions/916190/vs2010-and-vs2008-project-compatibility – Konamiman

+0

솔루션과 프로젝트는 업그레이드 할 수 있지만 이전 프레임 워크 버전은 계속 대상으로 삼습니다. 다중 타겟팅은 계속 사용할 수 있습니다. –

2

하나 " 트릭 "스레드를 디버깅 할 때 도움이되는 것은 디버깅하는 동안 많은 도움이되므로 각 스레드의 이름 속성을 설정하는 것을 기억하는 것입니다. 스레드의 Name 속성이 할당되지 않은 경우 null 값을 가지며 디버깅 창이 <No name>으로 표시되므로 별 도움이되지 않습니다.

0

나는 이것이 C# 질문이지만 여전히 C#에서는 F #으로 작성된 라이브러리를 포함하여 모든 CLR 라이브러리를 사용할 수 있음을 알고 있습니다. F #에는 동시성이 기능적 특성 (부작용 없음)으로 인해 매우 쉽게되는 많은 경우가 있습니다. 어쩌면 F #에서 일부 부품을 쓰는 것이 좋습니다.

1

내가 제안하는 또 다른 사항은 일부 클래스를 wmi 인스턴스로 노출하는 것입니다. 이렇게하면 응용 프로그램을 다시 시작하지 않고도 설정을 조정하고 함수를 호출 할 수 있으므로이 방법을 사용하면 즉시 효과를 확인할 수 있습니다. this 문서를 참조하십시오.

관련 문제