2012-05-30 32 views
3

我有一個(長時間運行)的腳本,我嘗試執行。不幸的是,當它運行時,PowerShell的內存使用量開始增加。該腳本相對簡單,我看不到任何明顯的內存泄漏。但是,我使用的API可能表現不佳。獲取Powershell中對象的內存大小

有沒有一種簡單的方法從powershell中獲取對象的內存大小,所以我可以看到我的懷疑是否正確?

+0

你使用的是什麼樣的API? –

回答

5

也許做一個粗暴的方式是這樣的:

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

如果你也許能減輕它的內存泄漏:

[gc]::Collect() 
+0

管理一起破解一些東西......原來API確實有內存泄漏,但一旦找到罪魁禍首,我就可以解決它。謝謝! – dckrooney

+0

我認爲[gc] :: Collect()是與Powershell一起工作時的天賜之物.. Andy,你介意我是否問這是第三方COM對象,還是Windows OS/.NET的一部分? –

+0

@indifferentDrum'[gc]'是一種內置類型。我不得不用它來解決處理打開文件的[第三方庫問題](http://dotnetzip.codeplex.com/workitem/12727)。 –

5

另約方式:

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

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