簡體   English   中英

如何在4.0環境中加速Powershell的啟動?

[英]How to speed up startup of Powershell in the 4.0 environment?

我正在考慮在Perforce服務器上使用Powershell腳本作為觸發器。 不幸的是,即使在我們的快速硬件上,Powershell啟動仍需要2秒鍾。 現在,除非您考慮到200個用戶不斷地敲擊服務器,並且觸發器可能(取決於條件)在運行時導致表鎖定,停止其他相關請求,否則這似乎不是很多時間。

我正在尋找減少Powershell啟動時間的方法。 我在Google上找到的東西:

  • 減少個人資料。 這是默認安裝,沒有配置文件自定義,沒有PSCX等,所以這沒有幫助。
  • 在Posh二進制文件上運行NGEN。 對於V1問題,這是一個老建議。 我們在V2。
  • 保持溫暖。 初始的Posh啟動很慢但后來的初創公司很快。 對我們也沒有幫助。 在服務器上,熱啟動是2秒,並且經常請求保持溫暖。
  • 不要將Powershell用於此目的。 好吧,我希望避免那個“解決方案”......

有沒有人有任何其他建議減少啟動時間? 我不希望像cmd.exe或.NET命令行應用程序那樣快速啟動,但是如果我能得到這個.5秒,我想我們會沒事的。 不可能?

更新 - 事實證明這是一個4.0問題。 如果我按照另一個SO問題中的描述添加配置文件,啟動需要2秒。 如果我將其保留為默認值,那么啟動時間不到四分之一秒。

然后我想..也許這是4.0 GAC問題。 所以我在PowerShell博客上運行了腳本,但它說所有的程序集都已經完成了。 我確信它確實也使用了4.0 ngen。

所以我有兩個選擇:

  • 弄清楚為什么4.0比3.5貴得多。
  • 切換到我不需要它的3.5框架,我確實需要性能。

我想先解決第一個但不知道從哪里開始。 有人可以幫忙嗎?

在Posh二進制文件上運行NGEN。 對於V1問題,這是一個老建議。 我們在V2。

我一直在V3下玩這個,我發現有些圖像是生成的。

當然,創業公司現在感覺要快得多。 重啟后我會更清楚,因為第一次總是最糟糕的。 使用Win 7執行此操作的(我更新的)腳本是

$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$_"}
}

Technet我的問題得到了很好的答案后,我發現了一種更簡單的手動觸發NGEN的方法(因為它似乎不會在Windows 8.1的全新安裝中自動發生):

schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319"
schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64"

如果你堅持使用控制台主機powershell.exe,我擔心你可能會運氣不好,除非你想通過在自定義控制台應用程序中托管運行空間/運行空間來編寫優化的腳本處理器 - 或者是Windows服務 - 你滾動你自己。 你可能會刮掉第二個,但是不太可能為.NET應用程序啟動0.5秒,特別是如果服務器內存緊張的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM