PowerShell 技能连载 - 一个更好(更快)的 Start-Job
Start-Job 将一个脚本块发送到一个新的 PowerShell 进程,这样它可以独立并行运行。以下是一个非常简单的例子,演示 job 背后的概念:
1 | # three separate "jobs" to do: |
如果不用 job,那么需要等待 19 秒。幸好有了 job,这个过程可以缩短到 8 秒。
然而,也有副作用。由于 job 是在独立的应用中执行的,数据必须以 XML 序列化的方式来回传递。job 要传回越多的数据,就需要越多的时间。有些时候这个副作用会盖过了优点。
一个更好的方是在原来的 PowerShell 实例的子线程中运行 job。以下代码演示这种功能。它创建了一个新的名为 Start-MemoryJob 的命令,可以替代 Start-Job。其余的代码完全不用改变。
使用 Start-MemoryJob,不需要任何对象序列化。您的 job 可以快速平滑地运行,而没有返回大量的数据。而且,您现在获取到的是原始的对象。不再需要处理序列化过的对象。
1 | $code = @' |
