성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>PerformanceCounter - Category does not exist.</h1> <p> 성능 모니터링 도구를 보면 닷넷 관련해서 다음과 같은 범주의 성능 카운터들이 제공되는 것을 볼 수 있는데요.<br /> <br /> <img alt='admin_perf_counter_1.png' src='/SysWebRes/bbs/admin_perf_counter_1.png' /><br /> <br /> 이를 이용하기 위해 실제로 코드를 작성하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { foreach (var item in PerformanceCounterCategory.GetCategories()) { if (item.CategoryName.IndexOf("CLR") != -1) { Console.WriteLine(item.CategoryName); } } Console.WriteLine(); string categoryName = ".NET CLR Memory"; var category = new PerformanceCounterCategory(categoryName); var counters = <span style='color: blue; font-weight: bold'>category.GetInstanceNames(); // 예외 발생: Category does not exist</span> string counterName = "Gen 0 heap Size"; using (PerformanceCounter perfCounter = <span style='color: blue; font-weight: bold'>new PerformanceCounter(categoryName, counterName, "......", true)) // 예외 발생: Category does not exist</span> { // ...... } } } } </pre> <br /> 위의 2가지 코드에서 예외가 발생하는 것을 볼 수 있습니다. 분명히 ".NET CLR Memory" 범주가 있는데도, 이에 대한 정보를 구하려고 하니 없다고 예외를 뿌리고 있는 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > System.InvalidOperationException was unhandled Message=Category does not exist. Source=System StackTrace: at System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter) at System.Diagnostics.PerformanceCounter.Initialize() at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly) at ConsoleApplication1.Program.Main(String[] args) in d:\...\ConsoleApplication1\Program.cs:line 26 InnerException: </pre> <br /> 다행히 이에 대한 원인은 다음의 글에서 쉽게 찾을 수 있었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C#: Accessing PerformanceCounters for the “.NET CLR Memory category” ; <a target='tab' href='http://stackoverflow.com/questions/4705698/c-accessing-performancecounters-for-the-net-clr-memory-category'>http://stackoverflow.com/questions/4705698/c-accessing-performancecounters-for-the-net-clr-memory-category</a> </pre> <br /> 즉, ^^ 관리자 권한으로 실행해야 한다는 군요.<br /> <br /> 비-관리자 권한일 때는 다음의 CLR 성능 카운터를 구할 수 있는 반면,<br /> <br /> <ul> <li>.NET CLR Networking</li> <li>MSSQL$SQLEXPRESS:CLR</li> <li>.NET CLR Data</li> <li>.NET CLR Networking 4.0.0.0</li> </ul> <br /> 관리자 권한인 경우 다음의 범주를 모두 다룰 수 있습니다.<br /> <br /> <ul> <li>.NET CLR Exceptions</li> <li>.NET CLR Networking</li> <li>.NET CLR Loading</li> <li>.NET CLR LocksAndThreads</li> <li>.NET CLR Remoting</li> <li>.NET CLR Security</li> <li>.NET CLR Interop</li> <li>.NET CLR Memory</li> <li>.NET CLR Data</li> <li>.NET CLR Networking 4.0.0.0</li> <li>.NET CLR Jit</li> <li>MSSQL$SQLEXPRESS:CLR</li> </ul> <br /> 그나저나... 이런 것은 성능 카운터의 부작용이라고 봐야 할 것 같습니다. 왜냐하면, 구하려는 성능 카운터의 대상이 자신과 동일한 exe인 경우일지라도 그 정보를 구할 수 없다는 것인데, 자신에 대한 성능 정보를 접근하는 것에 특별한 권한이 필요하다는 것은 좀 아이러니하죠. 다른 프로세스라면 이해할 수 있지만! ^^<br /> </p><br /> <br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3542
(왼쪽의 숫자를 입력해야 합니다.)