【问题标题】:HOW to deploy C# application with GAC and NGEN如何使用 GAC 和 NGEN 部署 C# 应用程序
【发布时间】:2014-07-03 10:11:08
【问题描述】:

我有一个小型 C# 工具,编译为 Windows 应用程序,其目标是包装其他工具的执行。这个工具会经常执行,有时每秒 100 次,这是我无法改变的;与框架 2 相同。对于此工具而言,最重要的是短暂的热启动。

使用 Visual Studio 2013,我使用强名称密钥签署了我的程序集。编译“Release”并得到“EXE”文件。接下来我运行 ngen /install app.exe

这就是我从这里和那里的一百万个帖子中所能理解的全部内容。 现在我需要将此 app.exe 移动到我的 12 台服务器上,我不知道是否应该只在每台机器上安装 ngen,或者也应该将我的 DEV windows/assembly 文件夹结构复制到服务器 windows/assembly(当然是我的应用程序部分仅)。

我在一台服务器上安装了 ngen,但我没有看到程序集已创建,因此需要更多高级主管的帮助。

谢谢 帕维尔。

更新:我再次检查并在 x64 中找到了程序集。那么只运行ngen真的就够了吗?

回顾:我将 exe 复制到服务器并进行了 ngen 安装,检查了程序集是否已创建。我运行机器来启动 exe 500 个项目 - 它们都在 1 分 24 秒内完成(来自互斥日志)。我重复测试并得到完全相同的结果: 1.24 接下来我进行了 ngen 卸载并检查程序集是否已删除,确实如此。我进行了相同的测试,结果是 1.26(大声笑)。考虑到它稳定且执行时间对我来说完全令人满意,我想我会放弃它并停止研究使用 GAC/NGEN。但是对于这种情况和我最初的问题的任何 cmet 表示赞赏。

【问题讨论】:

  • 每秒启动一个进程 100 次...我认为 ngen 不会有太大帮助。我建议重新设计。想想单个实例(可能是服务)在旋转。
  • 当然,我会重新设计,但这是从旧的生锈系统运行集成的唯一方法。我不指望 ngen 有很大帮助。如果它可以做一点就足够了。
  • 大多数生锈的旧系统都可以创建/写入文件。让它这样做。使用单个程序监控文件/文件夹。
  • ngen 完全不能保证提供帮助。事实上,在某些情况下,它可能会导致性能下降。测量是唯一可以帮助你的东西。如果你只有一个简单的控制台应用程序,代码很少,启动时不会有太大的减速 - JIT 编译器只编译它目前需要的东西,所以小应用程序几乎没有什么好处来自ngenngenned 代码并不快,它只是避免了一些安全检查和运行时编译(但到目前为止还不是全部)。
  • 在你提到的 1 分 24 秒内 500 次的回顾中,你的目标是每秒 100 次......对我来说这是一个巨大的差异,可能会极大地影响可能的答案和 cmets。跨度>

标签: c# .net deployment gac ngen


【解决方案1】:

您应该将应用程序运行所需的所有程序集部署到新机器上。然后,您可以根据需要使用 NGEN。像 WiX 这样的安装程序可以为您做这两件事。见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多