Windows
呼叫 powershell.exe 非常慢
我有一個帶有 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的資訊。