7

У меня проблема с медленным запуском PowerShell в Windows 10 (версия 1703 - Creators Update).

Мои технические характеристики (довольно быстрая машина): Intel i5-7440HQ (Quad Core) / 32 ГБ DDR4 RAM / 512 жестких дисков Samsung SSD.

Я пытался обойти профиль и политику выполнения, но это ничего не меняет:

powershell -noprofile -ExecutionPolicy Bypass (Measure-Command {powershell "Write-Host 1"}).TotalSeconds

6,228067

У моих друзей такой же ноутбук с Windows 10 без Creators Update запускается 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$_"}
}

Любая идея, как я могу исследовать эту проблему?

Привет

2 ответа2

2

Что вы можете попробовать, так это создать ярлык для powershell.exe, щелкнуть по нему правой кнопкой мыши> Свойства, перейти к параметрам вкладки, нажать "Использовать устаревшую консоль". Моя программа чтения с экрана (magic и zoomtext) не смогла перенести "новую" консоль, которая пришла с осенним обновлением (Powershell был очень медленным). С legacy on все снова работает нормально.

-1

У меня была такая же проблема в течение достаточно долгого времени, пока 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/673

Я попытался удалить файл истории в ~\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ который к тому времени занимал более 6 ГБ, и после этого консоль PowerShell начала открываться довольно быстро.

Возможно, медлительность, с которой вы сталкиваетесь, заключается в том, что PowerShell пытается прочитать большой файл истории (который еще недостаточно велик, чтобы вызвать OutOfMemory).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .