Windows 10(バージョン1703-Creators Update)でのpowershellプロンプトの起動が遅い問題があります。
私のハードウェア仕様(かなり高速なマシン):Intel i5-7440HQ(クアッドコア)/ 32GB DDR4 RAM/512 Samsung SSDハードドライブ。
プロファイルと実行ポリシーをバイパスしようとしましたが、何も変わりません。
powershell -noprofile -ExecutionPolicy Bypass(Measure-Command {powershell "Write-Host 1"}).TotalSeconds
6,228067
私の友人のクリエーターアップデートなしのWindows 10搭載の同じラップトップは、Powershellを0.5秒未満で実行します。
また、ngen.exeを使用してコンパイルを試みましたが、それは役に立ちませんでした:
$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
if (! $_.location) {continue}
$Name = Split-Path $_.location -leaf
Write-Host -ForegroundColor Yellow "NGENing : $Name"
ngen install $_.location | % {"`t$_"}
}
この問題をどのように調査すればよいですか?
ご挨拶
これは私にも起こっていました-最善のルートではないかもしれませんが、powershell.exe
Windows Defenderの除外リスト のリストを20秒から1秒未満に短縮しました。
レガシーコンソールを使用し、PSReadLineを削除し、ngenを実行してもまったく効果がないようです。
あなたが試すことができるのは、powershell.exeへのショートカットを作成し、それを右クリックして>プロパティ、タブオプションに移動し、「レガシーコンソールを使用」をクリックします。スクリーンリーダー(マジックとズームテキスト)は、秋のアップデートに付属する「新しい」コンソールに耐えられませんでした(Powershellは非常に遅くなっていました)。
PowerShellが起動時に次のエラーで失敗し始めるまで、私はかなり前から同じ問題を経験していました:
Exception:
System.OutOfMemoryException: Array dimensions exceeded supported range.
at System.Collections.Generic.List`1.set_Capacity(Int32 value)
at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)
at System.Collections.Generic.List`1.Add(T item)
at System.IO.File.InternalReadAllLines(String path, Encoding encoding)
at Microsoft.PowerShell.PSConsoleReadLine.<ReadHistoryFile>b__67_0()
at Microsoft.PowerShell.PSConsoleReadLine.WithHistoryFileMutexDo(Int32 timeout, Action action)
at Microsoft.PowerShell.PSConsoleReadLine.DelayedOneTimeInitialize()
at Microsoft.PowerShell.PSConsoleReadLine.Initialize(Runspace runspace, EngineIntrinsics engineIntrinsics)
at Microsoft.PowerShell.PSConsoleReadLine.ReadLine(Runspace runspace, EngineIntrinsics engineIntrinsics)
-----------------------------------------------------------------------
これにより、既存のGithubの問題が発生しました: https://github.com/lzybkr/PSReadLine/issues/67
それまでに6 GBを超える~\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\
の履歴ファイルを削除してみましたが、その後PowerShellコンソールがすぐに開き始めました。
おそらく、あなたが経験する遅いのは、PowerShellが大きな履歴ファイル(OutOfMemory
を引き起こすほどにはまだ大きくない)を読み取ろうとしていることです。
ロードされたすべてのアセンブリPowerShellをngen
ingする代わりに、Windows 10を更新するたびに実行する傾向がありますngen update
:
. (Join-Path ([Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()) ngen.exe) update
2019年5月のWin10に更新した後、
(measure-command { powershell.exe -command "1+1" }).TotalSeconds
1.35秒から0.55秒まで。