私はscirptを持っていますが、それはうまくいきますが、マルチスレッドを使用することで少しスピードアップしたいと思います。問題は、多くのコードを変更することなく、それを行うのはちょっと難しいということです。私は新しい分離された範囲で仕事を避けたいですが、それは不可能であるように見えます。また、開始ジョブは本当に遅いです、実行を開始するには~~150ミリ秒必要です。ジョブを回避する方法はありますか?Powershellが完成したスクリプトにマルチスレッドを追加する
Param(
[int]$arg1 = 2, [int]$arg2 = 3
)
$functionDoSomething = {
function doSomething($inp) {
return $inp + 10
}
}
function doSomething($inp) {
return $inp + 10
}
# time: 1523337 ticks
Measure-Command {
Start-Job -Name Job1 -InitializationScript $functionDoSomething -ScriptBlock {
return doSomething ($arg1 + $arg2)
} -ArgumentList $arg1, $arg2
Wait-Job Job1
$var2 = Receive-Job Job1 # result is 10, so arguements aren't passed correctly, trick with @($arg1, arg2) = the same result
}
# time: 6867 ticks
Measure-Command {
$var3 = doSomething ($arg1 + $arg2) # result is 15
}
ありがとうございました!しかし、この解決策には1つの問題があります。私のスクリプトはエンタープライズ環境で働いています.PSからではなくexternモジュールを追加するのはちょっとした問題です。また、スクリプトはあるマシン上で動作するように意図されており、新しいスレッドでスクリプトの一部を呼び出すことによってスピードアップします。このソリューションがうまくいくかどうかわかりません。 – PatrykMilewski
これは外部モジュールではありません。それは単にあなたのための仕事を容易にする機能です。なぜホイールを再発明するのですか? Invoke-Parallel.ps1ファイルをダウンロードしてください。独自のスクリプトの開始時にこの関数をロードするだけで、Import-Module 'Invoke-Parallel.ps1'を使用して使用できるようになります。この関数は、Start-Jobとそのすべてのオーバーヘッドをバイパスする.NET System.Management.Automation.Runspacesを使用します。 –
私はそれに試してみましょう:) – PatrykMilewski