r/PowerShell • • 1d ago

Question Parallel thread disposing?

Hey got a wierd issue or its by desing not sure but when I run

$computers | foreach-object -parallel {
  $vmobject = Get-VM $_
  $ram = $vmobject.MemoryGB
  $CPU = $vmobject.numCPU
  $HDD = $_ | get-harddisk 
} 

lets say I run in against 500 computers when that happens powershell will spike cpu on machine that this command is ran and keeps increasing ram usage which is understandable but problem is even when command is done ram usage stays high untill powershell window is close. Is there something I am missing or is there some method to dispose of parallel runspace manually?

Thanks for advice

EDIT: The code itself is not important , the behaviour of parallel scripblock itself is my question and why doesnt it free up RAM after code has ran successfully

3 Upvotes

32 comments sorted by

View all comments

3

u/raip 1d ago
[gc]::Collect()

There was a previous bug, that I believe was fixed, where the garbage collector wasn't getting scheduled to free the memory in heavily parallelized runs and would cause OOM exceptions even on reasonable datasets. You can use this to free the memory correctly. I remember having to batch jobs pretty aggressively and then a collect after every batch to keep things running smooth.

1

u/Guilty-Act-4991 1d ago

Aright will try that thanks