2011-07-04 15 views
9

다른 .NET 4 응용 프로그램에서 실행중인 .NET 4 응용 프로그램에서 많은 성능 카운터를 읽으려고합니다.C#에서 성능 카운터 읽기 : 인스턴스가 지정된 범주에 없습니다.

일부 카운터 (예 : Process\% Processor TimeProcess\Private Bytes)가 정상적으로 작동합니다. 내가 호출 할 때

Instance 'MyApplication' does not exist in the specified Category 

: 그러나, 최대한 빨리 닷넷 범주 중 하나와 같은 .NET CLR Memory\# Gen 0 Collections에서 성능 카운터를 읽으려고 시도로, 나는 다음과 같은 예외가

new PerformanceCounterCategory(".NET CLR Memory").GetInstanceNames() 

그것은 반환 매우 작은 인스턴스 집합 및 MyApplication은 실제로 목록에 없습니다. 그러나 성능 카운터를 perfmon에서 보면 동일한 범주/카운터에서 볼 수있는 인스턴스 목록이 훨씬 길며 MyApplication이 포함되어 있습니다.

.NET 카운터가 내 응용 프로그램에 표시되지 않는 이유를 알고있는 사람이 있습니까?

(참고 : 모니터링되는 응용 프로그램은 으로 모니터링 응용 프로그램에서 시작하므로 동일한 사용자 계정으로 실행됩니다.) 효과 없음)

+0

http://stackoverflow.com/questions/5832709/exception-instance-name-of-instance-does-not-exist-in-the-specified-category –

+0

문제는 없습니다. 1 인스턴스 만 XML 구성을 사용하거나 사용하지 않으면 작동하지 않으며 어떠한 경우에도 카운터는 perfmon에서 제대로 작동합니다. – rix0rrr

+0

실제 생성 된 실행 파일을 실행할 때''ConsoleApplication2 "'만 얻습니다. Visual Studio에서 프로그램을 실행하면 이해가되지 않습니다. 대신'ConsoleApplication2.vshost'를 얻습니다. –

답변

18

문제와 관련된 두 가지 설정이 있습니다.

맨 먼저 프로젝트 + 속성, 빌드 탭, 플랫폼 대상. 64 비트 운영 체제가 설치된 컴퓨터에서이 값을 x86으로 설정하면 이 아닌에 64 비트 프로세스가 포함 된 인스턴스 이름 목록을 얻을 수 있습니다. Perfmon.exe는 64 비트 프로세스이며 32 비트 및 64 비트 응용 프로그램 모두를 표시합니다. Visual Studio 2010에서 플랫폼 대상을 AnyCPU로 설정하여 동일한 동작을 얻으십시오.이 동작은 Visual Studio 2010에서 더 이상 기본값이 아닙니다. "32 비트 선호"가 표시되면이를 실행 취소하십시오.

두 번째는 Project + Properties, Debug 탭, "Visual Studio 호스팅 프로세스 사용"옵션입니다. 이 옵션을 선택하면 yourapp.exe 대신 yourapp.vshost.exe라는 프로세스를 디버깅합니다. 그것도 인스턴스 이름에 영향을 미칩니다. yourapp.vshost가됩니다. 특정 경우에 문제가되지는 않습니다.

이 추측이 정확하지 않은 경우 필수 정보로 질문을 업데이트하십시오.

+2

플랫폼 대상 때문입니다. x86에서 '모든 CPU'로 변경되었습니다. 고마워요, 나는 이것에 대해 전혀 생각하지 못했습니다! – rix0rrr

+0

또한 '프로젝트 속성 -> 빌드 탭 -> 32 비트 선호'가 설정되지 않았는지 확인하십시오. – Ananke

+0

나는 동일한 문제가있다. 내가 어떤 CPU, x86 및 x64 (32 비트가 설정되지 않음)를 시도했다. 각 상황에서 동일한 오류가 발생합니다. 다른 사람이이 문제가 있습니까? – Roger