在使用使用 RunSpace 的脚本时,我发现它占用了越来越多的系统内存。据我了解,这是因为打开的 RunSpace 在完成后不会关闭。它们保留在内存中,积累了兆字节。
如何正确关闭 RunSpace?但是,我不知道需要多长时间 - 1 秒或 1 小时。完成后自行关闭。
例如,我将给出任意脚本。
第一个脚本是我如何在 RunSpace 完成时关闭它(它显然不起作用)。
$Array = 1..10000
$PowerShell = [PowerShell]::Create()
$RunSpace = [Runspacefactory]::CreateRunspace()
$RunSpace.Open()
$RunSpace.SessionStateProxy.SetVariable('Array', $Array)
$RunSpace.SessionStateProxy.SetVariable('PowerShell', $PowerShell)
$PowerShell.Runspace = $RunSpace
[void]$PowerShell.AddScript({
# Fill the system memory so that it can be seen in the Task Manager.
$Array += $Array
$Array
# Closing the Process, which should close the RunSpace, but this does not happen.
$Powershell.Runspace.Dispose()
$PowerShell.Dispose()
})
$Async = $PowerShell.BeginInvoke()
# Other jobs in the main thread...
从系统内存来看,第二个脚本似乎更正确。但是,当然它并不适用于生活,因为Start-Sleep 10
冻结了主进程。
$Array = 1..10000
$PowerShell = [PowerShell]::Create()
$RunSpace = [Runspacefactory]::CreateRunspace()
$RunSpace.Open()
$RunSpace.SessionStateProxy.SetVariable('Array', $Array)
$PowerShell.Runspace = $RunSpace
[void]$PowerShell.AddScript({
# Fill the system memory so that it can be seen in the Task Manager.
$Array += $Array
$Array
})
$Async = $PowerShell.BeginInvoke()
Start-Sleep 10
$PowerShell.EndInvoke($Async) | Out-Null
$PowerShell.RunSpace.Dispose()
$PowerShell.Dispose()
# Other jobs in the main thread...
请写信给我关闭 RunSpace 完成的正确方法。谢谢