【发布时间】: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 编译器只编译它目前需要的东西,所以小应用程序几乎没有什么好处来自ngen。ngenned 代码并不快,它只是避免了一些安全检查和运行时编译(但到目前为止还不是全部)。 -
在你提到的 1 分 24 秒内 500 次的回顾中,你的目标是每秒 100 次......对我来说这是一个巨大的差异,可能会极大地影响可能的答案和 cmets。跨度>
标签: c# .net deployment gac ngen