我的脚本中有以下示例。我称相同的运行空间和相同的脚本块,但参数不同。目的是在响应式GUI中更新许多Windows窗体。
问题在于所有完成的实例都保留在内存中。如果我打电话太多,PowerShell将冻结。
是否有办法清理所有完成的实例并保留正在运行的实例? 在关闭脚本之前,如何强制删除所有实例?
$sync = [Hashtable]::Synchronized(@{})
$ScriptBlock = {
$task = [PowerShell]::Create().AddScript({
Param($var, $var2, $var...)
# Do some stuff... Update $sync.data in many windows forms
# .....
# whe finish cleanup only this particular instance
}).AddArgument($var1,$var2)
$runspace = [RunspaceFactory]::CreateRunspace()
$runspace.ApartmentState = "STA"
$runspace.ThreadOptions = "ReuseThread"
$runspace.Open()
$runspace.SessionStateProxy.SetVariable("sync", $sync)
$task.Runspace = $runspace
$task.BeginInvoke()
}
$sync.data = $value
while (<#Condition true#>) {
Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $var1, $var2
}