Performance 如何在4.0环境中加速Powershell的启动?
我正在考虑在Performce服务器上使用Powershell脚本作为触发器。不幸的是,即使在我们的快速硬件上,Powershell也需要2秒钟才能启动。现在,这似乎不是很长的时间,除非你认为200个用户不断地对服务器进行敲击,并且触发器可能(取决于条件)在运行时导致表锁定,拖延其他相关请求。 我正在寻找缩短Powershell启动时间的方法。我在谷歌上找到的东西:Performance 如何在4.0环境中加速Powershell的启动?,performance,powershell,Performance,Powershell,我正在考虑在Performce服务器上使用Powershell脚本作为触发器。不幸的是,即使在我们的快速硬件上,Powershell也需要2秒钟才能启动。现在,这似乎不是很长的时间,除非你认为200个用户不断地对服务器进行敲击,并且触发器可能(取决于条件)在运行时导致表锁定,拖延其他相关请求。 我正在寻找缩短Powershell启动时间的方法。我在谷歌上找到的东西: 缩小轮廓。这是一个默认安装,没有配置文件自定义,没有PSCX等,所以这没有帮助 在高级二进制文件上运行NGEN。这是关于V1问题
- 缩小轮廓。这是一个默认安装,没有配置文件自定义,没有PSCX等,所以这没有帮助
- 在高级二进制文件上运行NGEN。这是关于V1问题的老建议。我们在V2上
- 保持温暖。最初的豪华创业很慢,但后来的创业很快。对我们也没有帮助。在服务器上,热启动时间为2秒,并通过频繁请求保持热启动
- 不要为此目的使用Powershell。嗯,我希望避免那种“解决方案”
- 找出为什么4.0比3.5贵得多
- 切换到3.5框架,在那里我不需要它,我需要性能
我很想解决第一个问题,但不知道从哪里开始。有人能帮忙吗?如果您坚持使用控制台主机powershell.exe,恐怕您会运气不佳,除非您想通过在自定义控制台应用程序(或windows服务)中托管运行空间/运行空间工厂来编写优化的脚本处理器,否则您可以自行启动。您可以节省一秒钟,但是.NET应用程序不太可能启动0.5s,特别是在服务器内存紧张的情况下 在高级二进制文件上运行NGEN。这是关于V1问题的老建议。我们在V2上 我一直在V3下玩这个,我发现有些图像 生成 当然,现在的创业速度要快得多。过一段时间我会知道的 重新启动,因为第一次总是最糟糕的。执行此操作的(我更新的)脚本 赢了7分就是
$env:path=[Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblys()|%{
如果(!$\位置){继续}
$Name=拆分路径$\位置-叶
写入主机-ForegroundColor黄色“NGENing:$Name”
ngen安装$|.location |%{`t$"
}
根据对的出色回答,我发现了一种更简单的手动触发NGEN的方法(因为在干净的Windows 8.1安装中似乎不会自动触发):
好吧,我发现这是一个4.0版本。更新的问题。您正在强制powershell v2.0在v4框架上运行?它不是为了这样设计的。我希望我有更多的细节。。。你有dotTrace或ANTS profiler来找出瓶颈在哪里吗?如果你仔细阅读这篇文章,你会发现它是关于托管托管4.0环境中的System.Management.Automation.dll的。正如这家伙所说,控制台主机(powershell.exe)没有针对4.0进行优化-事实上,powershell.exe甚至不是托管应用程序-它是本机的。它承载CLR。不支持它吗?哦好吧,Powershell 2为我们使用v4运行,到目前为止我还没有看到任何问题。只是启动延迟问题。本文还讨论了托管Powershell的4.0应用程序,以及使用4.0程序集的Powershell本身。我可以试着用.net分析器来分析它,但我认为这不会给我任何可以采取行动的东西。。出于好奇,我可能会尝试一下。我观察到,在干净安装Windows 8.1的情况下,此建议适用,并将Powershell启动时间减少了约10倍(如果存在空配置文件)。
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"