Windows

呼叫 powershell.exe 非常慢

  • March 4, 2016

我有一個帶有 Powershell V4.0 的 Windows 2008 R2 伺服器

我得到了一個非常簡單的腳本 test.ps1,其中包含以下內容:

Write-host "Hello world!"

我從這樣的 powershell 提示符呼叫這個腳本:

measure-command { powershell.exe -file .\test.ps1 }

如您所見,我獲得了極高的價值:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 7
Milliseconds      : 992
Ticks             : 79922815
TotalDays         : 9,25032581018519E-05
TotalHours        : 0,00222007819444444
TotalMinutes      : 0,133204691666667
TotalSeconds      : 7,9922815
TotalMilliseconds : 7992,2815

或者

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 655
Ticks             : 46556579
TotalDays         : 5,38849293981481E-05
TotalHours        : 0,00129323830555556
TotalMinutes      : 0,0775942983333333
TotalSeconds      : 4,6556579
TotalMilliseconds : 4655,6579

它佔用了我的 CPU 50%。為什麼它太長了?我試過了,-noprofile但它是一樣的。

謝謝你的幫助。

Powershell 載入和 JIT 編譯噸,噸,和噸的東西。這會佔用大量過多的 CPU 週期和磁碟 I/O。

嘗試使用ngen.exe(本機圖像生成器)預編譯 Powershell 在啟動期間載入的程序集。只是可能會改善您的啟動時間。

$FrameworkDir=[Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
$NGENPath = Join-Path $FrameworkDir 'ngen.exe'

[AppDomain]::CurrentDomain.GetAssemblies() |
 Select-Object -ExpandProperty Location |
 ForEach-Object { & $NGENPath """$_""" } 

在此處閱讀有關 ngen的資訊。

引用自:https://serverfault.com/questions/761301