ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

[C#] WMI를 이용한 현재 메모리 사용량 구하기

created:2012-03-03
updated:2015-07-03
edit
매일매일 개발하는 소스코드를 올리고 있습니다. 원래는 프로젝트가 끝나고 올리려고 했으나, 그러다 보니 까먹는 경우가 있어서 이렇게 매일매일 올리는 소스코드 입니다. 제가 쓴 소스코드의 문제 혹은 개선점이 있으면 언제든지 댓글 달아 주세요 
최근에 메모리 사용량을 측정해서 특정 메모리 사용량 이상 혹은 몇 퍼센트(%)이상이 되면 특정 기능을 수행하도록 하는 코드를 C#으로 작성을 했습니다. 그런데 처음에 가장 어려웠던 부분이 메모리의 사용량 즉, 작업 관리자를 눌러서 성능란에서 원래 물리적인 메모리가 얼마인데, 현재 사용량, 남은 사용량, 그리고 퍼센트를 구하는 방법이었습니다. 
일단 코드를 보시면 아래와 같습니다. 
위에 코드를 보시면 일단 ManagementClass 인스턴스를 만드는데 여기에서 String 형식의 인자로 [WMI(Windows Management Instrumentation)](http://www.simpleisbest.net/articles/181.aspx "[http://www.simpleisbest.net/articles/181.aspx]로 이동합니다.") 클래스 경로를 넘겨주게 되어 있습니다. 그래서 찾아 보니 다양한 클래스 형식이 있는데 여기서는 OS 관련된 부분에 대해서 일단 선택을 했습니다. 
그리고  ManagementObjectCollection 객체를 가져와서 하나씩 ManagementObject 의 객체인 info 에서 [item](http://msdn.microsoft.com/ko-kr/library/system.management.managementbaseobject.item(v=vs.90).aspx "[http://msdn.microsoft.com/ko-kr/library/system.management.managementbaseobject.item(v=vs.90).aspx]로 이동합니다.") 속성을 통해서 지정해서 필요한 속성을 가지고 올 수 있다. 위에 코드에서는 필자가 전체 메모리 사이즈와 현재 남아있는 물리적인 메모리 사이즈를 가져와서, 남아있는 사이즈를 구해내고 그리고 그것을 바탕으로 현재 메모리 사용량을 계산하고 있다. 
**본 소스코드에서 중요하게 볼 부분은 사실 어떻게 메모리를 구하느냐가 아니다.** 가장 중요하게 생각하는 부분은 WMI라는 것을 통해서 마이크로소프트가 윈도우 운영체제에 대한 정보를 제공하고 있다는 사실이다. 우리는 작업관리자를 통해서 해당 내용들을 쉽게 확인 할 수 있지만, 특정 어플리케이션에서 그러한 내용들을 가지고와서 이용하던지 하려면 윈도우 운영체제 내에서는 WMI를 이용하는것이 가장 적절하다는 생각이 든다. 
필자가 올린 코드에서 보여주는 것은 C#을 통해서 특정 클래스로 윈도우에서 정한 스키마로 자원 정보에 대해서 접근하고 있다는 사실이다. 기본적으로 WMI가 무엇인지에 대한 이해도 필요하겠지만, 우선적으로 써 보는것이 가장 좋을듯 하다. 다른 여타의 정보에 대해서 쓰려면, [WMI Class](http://msdn.microsoft.com/en-us/library/windows/desktop/aa394554(v=vs.85).aspx "[http://msdn.microsoft.com/en-us/library/windows/desktop/aa394554(v=vs.85).aspx]로 이동합니다.")에 대해서 알아야 한다. 그 부분은 여기를 참고하시길. 
 

#c#  #dev  #Memory  #WMI  #메모리  #메모리 사용량