2009-04-30 36 views
1

我從C#中使用PowerShell的異步管道調用自動PowerShell腳本的使用情況和我注意到,當我再次執行腳本遍地,使用相同的運行空間,在<scriptname>.vhost.exe內存使用量上升,它會在一天的運行後耗盡內存。Powershell。 C#測量PowerShell主機內存使用情況

有多少來衡量內存已經由運行空間要求的,或確實是一個辦法,就是,即使是這樣,你會衡量它。我知道我可以準備一個特殊的腳本,向WMI呼叫,這將返回一個進程列表,我可以搜索正確的虛擬主機,然後子字符串特定的行,但我認爲這只是增加了概率。

我在想也許runspaceconfiguration類或$ host變量會提供summat,但我什麼都看不到。

理想我想大小分配給它的內存,而一旦得到了大小我會處理它,並創建一個新的運行空間,但價格昂貴。他們是否會通過Powershell配置釋放內存。

2009年5月26日

我想知道更多的是如何當在長時間內執行多個腳本影響運行時內存使用內存。基本上我有一個由規則驅動的執行引擎。當規則觸發時,腳本被執行。每個規則庫(規則集)都將擁有自己的PowerShell主機。問題是如果我執行多個腳本,該效果內存將如何成爲當前的appdomain。將主機轉儲到另一個應用程序域會更好嗎?還是將其設置爲運行時間超出當前標準C#的方式?問題是,他們缺乏優秀的文檔。本質上我想通過反覆使用來確保它們不是內存使用的累積。如果我將它放到遠程域中,那麼至少當它達到一定的大小時,我可以將其轉儲並重新創建。

你的想法是什麼?

+0

我問過一段時間之前是否有任何PowerShell分析器。不幸的是,沒有。也許你可以使用標準的.NET分析器並查看分配的PSObjects。 (例如dotTrace)。 – stej 2009-05-27 06:27:41

回答

0

我想你將需要發佈一個代碼片段,確切地說你如何使用powerscript對象來做到這一點。

此外,VSHost僅僅是宿主進程,當你從IDE(換句話說調試)你有運行在IDE外部應用程序時,同樣的情況運行?

1

其中第一個檢查區域將是在運行空間創建的任何對象解除引用(不變量對他們的指點),這樣他們就可以被垃圾收集的。

類似的問題可以在PowerShell控制檯和I blogged about that problem here發生。