performance - Powershell在4.0环境下如何加速启动?

标签 performance powershell

我正在考虑在我们的 Perforce 服务器上使用 Powershell 脚本作为触发器。不幸的是,即使在我们的快速硬件上,Powershell 启动仍然需要 2 秒。现在,这似乎没有多少时间,除非您考虑到 200 个用户不断冲击服务器,并且触发器可能(取决于条件)在运行时导致表锁定,从而拖延其他相关请求。

我正在寻找减少 Powershell 启动时间的方法。我在谷歌上找到的东西:

  • 减少轮廓。这是默认安装,没有配置文件自定义,没有 PSCX 等,所以这没有帮助。
  • 在 Posh 二进制文件上运行 NGEN。这是针对 V1 问题的旧建议。我们在 V2 上。
  • 保持温暖。最初的 Posh 启动很慢,但后来的启动很快。对我们也没有帮助。在服务器上,热启动是 2 秒,它通过频繁的请求保持温暖。
  • 不要为此目的使用 Powershell。好吧,我希望避免这种“解决方案”...

  • 有没有人有其他减少启动时间的建议?我不希望启动像 cmd.exe 或 .NET 命令行应用程序一样快,但如果我能把它缩短到 0.5 秒,我想我们会没事的。不可能的?

    更新 - 事实证明这是一个 4.0 问题。如果我按照 another SO question 中的描述添加配置文件启动需要 2 秒。如果我将其保留为默认值,则启动时间不到四分之一秒。

    然后我想..也许这是一个 4.0 GAC 问题。所以我在 PowerShell Blog 上运行了脚本但它说所有的程序集都已经 ngen'd。我确保它确实也在使用 4.0 ngen。

    所以我有两个选择:
  • 弄清楚为什么 4.0 比 3.5 贵这么多。
  • 切换到我不需要它的 3.5 框架,我确实需要性能。

  • 我很想解决第一个,但不知道从哪里开始。任何人都可以帮忙吗?

    最佳答案

    Run NGEN on Posh binaries. This is old advice for a V1 issue. We're on 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$_"}
    }
    

    关于performance - Powershell在4.0环境下如何加速启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208694/

    相关文章:

    Powershell 6.2 和 Get-CimInstance 远程停止/启动/重新启动服务问题

    powershell - “If”在foreach循环中不存在-什么?

    c# - 在大型对象数组中查找对象参数会花费太长时间吗? (C#)

    c - 将任何程序转换为语义等价的程序

    powershell - 有没有办法以编程方式获取 Azure AD 客户端 key 的描述?

    powershell - 如何输出到日志文件

    sql - 更快的 sqlite3 查询?我需要尽快处理 100 万行

    mysql - 如何提高 ORDER BY ... LIMIT ... 查询性能?

    c# - 未分配的变量和 "Not all code paths return a value"解决方法?

    powershell - Select-Object 直接输出到变量