2012-12-14 2 views
-2

메신저는 메모리 및 CPU 사용에 대한 모든 Windows 프로세스를 지속적으로 모니터링합니다. 특정 프로세스가 한계를 초과하면이를 종료 할 수 있어야합니다 (이 응용 프로그램이 admin 권리) 나는 다음과 같은 코드가있다과도한 메모리 사용에 대한 Windows 프로세스 모니터

그러나 이것은 하나의 프로세스를위한 것이므로 이름으로 프로세스를 알아야한다.

+0

대부분의 리소스를 사용할 때 프로세스를 종료하는 것은 생성하는 데이터의 손상을 최적으로 복구 할 수없는 최상의 방법입니다. 바쁜 dbase 엔진 서비스에 특히 효과적입니다. –

+0

@HansPassant 나는 당신을 얻지 않았다, 당신은 그것의 좋은 말하고 있는가? – techno

+0

당신은 downvoting에 대한 이유를 말할 수 있습니까? – techno

답변

2

Process.GetCurrentProcess은 프로그램을 나타냅니다. 기계에서 현재 실행중인 모든 프로세스를 검색하려면 Process.GetProcesses()을 시도하십시오.

+0

당신은 모니터링을 요구하고 있습니다. – techno

+0

당신이 무엇을 요구하고 있는지 잘 모릅니다. 'GetProcesses'는 컴퓨터에서 현재 실행중인 프로세스를 설명하는'Process' 인스턴스 배열을 반환합니다. 이러한 인스턴스는 메모리 사용을 포함하여 풍부한 정보를 제공합니다. 그들은 또한 프로세스를 죽이거나 다른 방식으로 상호 작용하는 방법을 제공합니다. [Process 클래스 문서] (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx) – Pierre

1

여기 많은 개인 메모리는 프로세스 당 존재하는 방법을 알 수있는 몇 가지 빠른 코드입니다 :

 foreach (var process in Process.GetProcesses().OrderByDescending(process => process.PrivateMemorySize64)) 
     { 
      Console.WriteLine(process.ProcessName + ": " + process.PrivateMemorySize64 + " bytes"); 
     } 

비록, Hans Passant를 들어주세요, 그는 맞아요. 프로세스를 무차별 적으로 죽이는 것은 좋은 생각이 아닙니다. 많은 메모리를 차지하는 것에 대해 걱정할 경우 제조사가 SQL Server와 같은 제한 방법이 있는지 또는 자신의 코드 인 경우 FIX IT인지 확인하십시오.

+0

에서 프로세스 우선 순위를 줄이는 방법이 있습니다. 감사합니다. 그것을 죽이는 것보다 – techno

+0

절대적으로 존재합니다. 'process.PriorityClass'는'ProcessPriorityClass' 열거 형 값'Idle','BelowNormal','Normal','AboveNormal','High','RealTime'을 취하는 읽기/쓰기 속성입니다. 'BelowNormal'을 원할 수도 있습니다. –

+0

Jesse, 저의 질문에 답을 얻고 있습니다. 투표를 끝내기로 결심했습니다. 질문을 개선하거나 저를 도와 줄 수 있습니까? – techno

관련 문제