2012-05-30 2 views
3

나는 (실행 시간이 긴) 스크립트를 실행하려고합니다. 불행히도, 실행되는 동안, powershell의 메모리 사용량이 올라 가기 시작합니다. 스크립트는 비교적 간단하며 명백한 메모리 누수를 볼 수 없습니다. 그러나 잘못 행동 한 API를 사용하고 있습니다.Powershell에서 개체의 메모리 크기를 얻는 중

powershell 내에서 개체의 메모리 크기를 쉽게 얻을 수있는 방법이 있습니까? 그렇다면 의문이 맞는지 확인할 수 있습니까?

[gc]::Collect() 
+0

어떤 종류의 API를 사용하고 있습니까? –

답변

5

아마도 원유 방법은 다음과 같이 될 것이다

$before = [gc]::GetTotalMemory($true) 
$s = "A new string object" 
$after = [gc]::GetTotalMemory($true) 

($after - $before)/1kb # return the delta in KBytes 
+0

함께 뭔가를 해킹하는 관리 ... API는 메모리 누수가 있었지만, 범인을 발견 한 후에는 그 문제를 해결할 수있었습니다. 감사! – dckrooney

+0

[gc] :: Collect()는 Powershell로 작업 할 때의 신의 선물이라고 생각합니다. Andy, 제 3 자 COM 개체 또는 Windows OS/.NET의 일부인지 묻는다면 마음에 드십니까? –

+0

@indifferentDrum'[gc]'는 빌트인 타입입니다. 열린 파일을 처리하는 [이 타사 라이브러리 문제] (http://dotnetzip.codeplex.com/workitem/12727)를 해결하기 위해 사용해야했습니다. –

5

또 다른 약 방법 : 당신이 그것을 완화 할 수있을 메모리 누수가있는 경우

$memBefore = (Get-Process -id $pid).WS 
# Create object here... 
$memAfter = (Get-Process -id $pid).WS 
($memAfter - $memBefore)/1KB 

: 할

관련 문제