首页 > 解决方案 > 我应该将 ScriptBlock 放在 foreach 循环中吗?

问题描述

我正在设置一些并行化,并想知道将 ScriptBlock 放置在 foreach 循环中是否有好处(或有害)。像这样...

for ($currentJob = 0; $currentJob -le 20; $currentJob++) {
    $jobBlock = {
        param ([int] $runCount)
        Write-Host "running... $runCount"
        for($i = 0; $i -lt 100000; $i++ ) {
        }
    }

    Write-Host "Starting job for $currentJob"
    Start-Job -ScriptBlock $jobBlock -ArgumentList $running.Count
}

...还是外面更好?

$jobBlock = {
    param ([int] $runCount)
    Write-Host "running... $runCount"
    for($i = 0; $i -lt 100000; $i++ ) {
    }
}

for ($currentJob = 0; $currentJob -le 20; $currentJob++) {
    Write-Host "Starting job for $currentJob"
    Start-Job -ScriptBlock $jobBlock -ArgumentList $running.Count
}

我来自 C# 世界,“内部工作”看起来会丢失或覆盖或不恰当地留给垃圾收集器。

只是想知道 PowerShell 的细微差别。

标签: powershell

解决方案


由于您没有使用 中的for语句中的任何变量$jobBlock,因此无需每次通过循环都重新定义它;在外面定义它。


推荐阅读