循环遍历 $allArrays 中的所有 arrayList。$allArrays 中的每个 arrayList 包含 10K 个用户 ID。

循环遍历 $allArrays 中的所有 arrayList。$allArrays 中的每个 arrayList 包含 10K 个用户 ID。

使用 PS 7.3.4 代码运行良好,没有错误。

问题- 脚本消耗的 RAM 不断增长。如何释放 RAM?如何查看哪些内容消耗了 RAM?任何建议都将不胜感激。

处理 10K 输入批次后的内存结果

第一组 10K 内存结果结束。

收集之前使用的循环内存:1,208,928,432

完整收集后循环使用的内存:512,021,912

第二组10K内存结果结束。

收集前循环使用的内存:1,160,822,952

完整收集后循环使用的内存:929,192,840

第三组10K内存结果结束。

收集前循环使用的内存:2,168,048,568

完整收集后循环使用的内存:1,355,942,720

。 。 。

第 8 组 10K 内存结果结束。

收集前循环使用的内存:12,562,155,960

完整收集后循环使用的内存:11,765,923,128

第 9 组 10K 内存结果结束。

收集之前使用的循环内存:13,170,803,320

完整收集后循环使用的内存:12,166,518,384

[int]$i3 = 1

循环遍历 $allArrays 中的所有 arrayList。$allArrays 中的每个 arrayList 包含 10K 个用户 ID。

做 {

$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) 

相关内容