4

これは、LOCALSERVER で 2.3 分で完了します。

A: measure-command {$x = invoke-command {gci -recurse "C:\"}}

これは、LOCALSERVER で 38.4 分で完了します。

B: measure-command {$x = invoke-command -comp LOCALSERVER {gci -recurse "C:\"}}

なぜBはそんなに遅いのですか? hereで説明されているように、「出力が XML にシリアル化されてから、再びオブジェクトに再構成されている」ためで、A ではなく B でしょうか? それとも何か他のことが起こっていますか?

LOCALSERVER は、PS v3 で Windows 2008R2 を実行します。どちらの場合$x.countも 98973 です。

リモート サーバーでのファイル検索に PSRemoting を使用するように既存のスクリプトを変更することについて疑問に思っていました。リモート ターゲットで gci を実行すると、検索が早く終了するのではないかと考えました。いくつかのテストでは、PSRemoting を使用した方が実際の検索の実行時間が長くなりました。ループバック シナリオについて尋ねているのは、それが最も単純なケースのように思えたからです。リモート サーバーでも同様の結果が得られました。したがって、次のような UNC パス検索に固執します。

gci -recurse \\REMOTESERVER\C$\folder

...これらの結果が奇妙に思えない場合や、リモート処理の構成または構文を調整することでパフォーマンスが大幅に向上する可能性がある場合を除きます。

4

3 に答える 3

2

前述のように、コマンドをリモートで呼び出すのに必要な時間には、リモート パイプラインから返された特定のオブジェクト (この場合は C ドライブの FileSystemInfo のツリー全体) を逆シリアル化するのに必要な時間も考慮する必要があります。ネットワーク経由でシリアライズおよびデシリアライズするオブジェクトの数を制限することをお勧めします。サーバーのパフォーマンスを比較する際は、コードを実行しているマシン内でかかる時間を考慮することをお勧めします。

Invoke-Command -comp LOCALSERVER { Measure-Command { gci -recurse "C:\" } }
于 2013-04-19T14:11:12.133 に答える
1

FileInfoはい、ネットワーク経由でオブジェクトとDirectoryInfoオブジェクトをシリアル化/逆シリアル化するオーバーヘッドについては正しいです。実際のオブジェクトを取得することに関心がない場合は、次のようにします。

icm -comp server { gci -rec c:\ | out-string }

少なくとも、桁違いに速くなるはずです。

于 2013-04-19T14:06:59.003 に答える