0

Using PS 7.3.4 The code works fine without errors.

Issue - the RAM consumed by the script keeps growing. How do I release the RAM? How do I see what is consuming the RAM? Any suggestions will be greatly apprciated.

Memory results after processing batches of 10K input

End of 1st group of 10K memory results.

For loop memory used BEFORE collection: 1,208,928,432

For loop memory used AFTER full collection: 512,021,912

End of 2nd group of 10K memory results.

For loop memory used BEFORE collection: 1,160,822,952

For loop memory used AFTER full collection: 929,192,840

End of 3rd group of 10K memory results.

For loop memory used BEFORE collection: 2,168,048,568

For loop memory used AFTER full collection: 1,355,942,720

. . .

End of 8th group of 10K memory results.

For loop memory used BEFORE collection: 12,562,155,960

For loop memory used AFTER full collection: 11,765,923,128

End of 9th group of 10K memory results.

For loop memory used BEFORE collection: 13,170,803,320

For loop memory used AFTER full collection: 12,166,518,384

[int]$i3 = 1

Loop through all of the arrayLists in $allArrays. Each arrayList inside $allArrays contains 10K user ids.

Do {

$allArrays[$i3] | ForEach-Object -Parallel {

# Contains code to call Microsoft graph API, get some info and write to file.

# At end of script, write all results to arrayList.
# Write all arrayLists to a file.
# Empty all arrayLists using arrayList.Clear()

# # Code to track variables that keep growing in size INSIDE foreach parallel.  Unfortunately the variables information returned does not show any variables exceeding a length of 3000.  Even after processing 200K input lines.
$varSize = get-variable -Name *
for ($i=0; $i -lt $varSize.Count; $i++)
    {
        if($varSize[$i].Value -and ($varSize[$i].Value.ToString().Length -gt 3000)){Write-host -ForegroundColor gray "`n`rDisplaying all variables with a length greater than 50"; Write-host -ForegroundColor gray "Name: $($($varSize[$i]).Name) `tLength: $($varSize[$i].Value.ToString().Length)"}
    }

}
# Function called to renew access token.
renewAccessToken

$memBefore = '{0:N0}' -f $([System.GC]::GetTotalMemory($false))
write-host -ForegroundColor Gray "`n`rFor loop memory used BEFORE collection: $memBefore - $(getTimestamp)"
[System.GC]::Collect()
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
$memAfter = '{0:N0}' -f $([System.GC]::GetTotalMemory($true))
write-host -ForegroundColor Gray "For loop memory used AFTER full collection: $memAfter - $(getTimestamp)"

# Code to track variables that keep growing in size OUTSIDE foreach parallel.  Unfortunately the variables information returned does not show any variables exceeding a length of 100.  Even after processing 200K input lines.
$varSize = get-variable -Name *
for ($i=0; $i -lt $varSize.Count; $i++)
    {
        if($varSize[$i].Value -and ($varSize[$i].Value.ToString().Length -gt 50)){Write-host -ForegroundColor gray "`n`rDisplaying all variables with a length greater than 50"; Write-host -ForegroundColor gray "Name: $($($varSize[$i]).Name) `tLength: $($varSize[$i].Value.ToString().Length)"}
    }
        
$i3++

} while(($allArrays.Count + 1) -ne $i3) 

0

You must log in to answer this question.