问题标签 [ngen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1906 浏览

.net - 有什么方法可以更改 .NET JIT 编译器以提高性能而不是编译时间?

我想知道是否有任何方法可以通过指定更深入优化的首选项来改变 .NET JIT 编译器的行为。如果做不到这一点,如果它还没有做某种配置文件引导的优化,那就太好了。

0 投票
1 回答
629 浏览

.net - 可以将 Phoenix 编译器用作更强大的 NGEN 吗?

如果您不了解 Phoenix,它是 Microsoft 的一个编译器框架,显然它将成为他们所有新编译器的基础。它可以读取来自 CIL、x86、x64 和 IA64 的代码;并以 x86、x64、IA64 或 CIL 发出代码。

我可以使用它来将纯 .Net 应用程序转换为纯本机应用程序吗?我的意思是,它不必加载任何 .Net .dll(甚至不是 mscoree),并且具有相同的语义?当然,这不包括反射。

0 投票
2 回答
12530 浏览

.net - 我在哪里可以下载最新的 ngen.exe?

我正在使用 ngen.exe(.Net Native Image Generator)版本 2.0.50727.312。这是最新版本吗?如果没有,我在哪里可以下载最新版本?msdn 上的此页面似乎没有下载链接。如果重要的话,我需要用于 .Net Framework 3.5 的 ngen.exe。

0 投票
6 回答
10056 浏览

asp.net - 使用 NGEN 有帮助吗?

当我们知道 NGEN 不会发生太大变化时,使用 ASP.NET 应用程序会更好吗?还是 JIT 足够好?

我问的唯一原因是因为Jeffrey Richter 在 2002 年的这篇文章说:

而且,当然,微软正在努力改进 CLR 及其 JIT 编译器,以便它运行得更快,生成更优化的代码,并更有效地使用内存。这些改进需要时间。对于迫不及待的开发人员,.NET Framework 可再发行组件包括一个名为 NGen.exe 的实用程序。

0 投票
2 回答
5654 浏览

clickonce - 是否可以将 NGen 与 ClickOnce 部署一起使用?

是否可以将 NGen 与 ClickOnce 部署一起使用?

0 投票
5 回答
4728 浏览

c# - 如何在安装结束时运行 nGen (MSI)?

我想在安装结束时执行 nGen,只是为了提高我的应用程序首次启动时的感知性能。我怎么能那样做?有一些最佳实践吗?我可以确定 nGen 始终与 .NET Framework 一起安装吗?

谢谢!

0 投票
3 回答
10512 浏览

.net - 需要帮助 NGen 恢复工作状态

NGen 对我的电脑不满意,我找不到深入了解问题所在的方法。

每次启动后,ngen 都会记录以下消息:

.NET 运行时优化服务 (clr_optimization_v2.0.50727_32) - 服务达到瞬时错误的限制。将关闭。从服务管理器返回的最后一个错误:0x8000ffff。

当我尝试在命令行启动优化服务时,我再次记录了同样的错误。

我设法启动了 ngen 服务并立即暂停队列(通过编写一个两行批处理文件,如下所示:

净启动 clr_optimization_v2.0.50727_32

ngen 队列暂停

所以现在我尝试通过执行不同状态级别的项目来清除队列,如下所示:

ngen executequeueditems 3 /nologo /verbose

但结果总是:

灾难性故障(HRESULT 异常:0x8000FFFF (E_UNEXPECTED))

...一路上我已经卸载/重新安装了 Visual Studio 2008。我已经卸载了 SQL Server 2005,并且我已经运行了“系统文件检查器”:sfc /scannow

缺乏想法,希望得到 ngen 专家的帮助。

我如何获得诸如“导致这些灾难性故障的原因是什么?”之类的信息。(请注意,/verbose 选项不会增加我发现的信息量。“要生成的队列中有哪些文件?”——我可以删除其中的一些文件,或者将责任归咎于特定文件。 ..

卸载和重新安装 .net framework 2.0 并不容易,因为这是 vista,它是操作系统的受保护部分。

更新:我也尝试过这里提供的建议(并在第一个回复中提到)——但我只是得到同样的灾难性失败消息。

C:\Windows\Microsoft.NET\Framework\v2.0.50727>ngen executequeueditems /nologo 灾难性故障(来自 HRESULT 的异常:0x8000FFFF (E_UNEXPECTED))

0 投票
5 回答
2548 浏览

.net - 在缓存之外生成原生图像

在我创建我的安装程序之前,我想使用NGEN.EXE它来生成我的程序集的本机图像。我希望这将使我的二进制文件保持不变Reflector。我对此是否正确?

我刚刚了解到所有本机图像现在都存储在本机图像缓存中。有没有办法获得本机二进制文件,然后我可以用安装程序打包?另一方面,是否可以在生成本机图像后摆脱原始程序集?

编辑:我正在使用一个应用程序,它在与服务器交谈时使用硬编码密钥进行加密。使用 .NET,人们很容易就能拿到钥匙。

0 投票
8 回答
18604 浏览

c# - 你用过ngen.exe吗?

这里有人用过ngen吗?在哪里?为什么?是否有任何性能改进?何时何地使用它有意义?

0 投票
1 回答
550 浏览

.net - 可共享页面中的 .NET JIT 程序集

在终端服务环境中运行 .NET 2.0 WinForms 应用程序时,我看到了一些我无法解释的意外结果。我读过的所有内容都表明,JIT 程序集(即不使用 NGen 创建本机图像)导致所有代码空间都存储在私有页面中,从而增加了工作集大小/内存压力。然而,实际结果(使用 Process Explorer、VMMap 和 WinDbg 验证)表明,即使是 JIT 程序集也确实被放置在可共享页面中(并且当有多个应用程序实例运行时,即使在单独的 TS 下也确实是共享的会话/用户)。

谁能解释为什么会这样?这是在 W2K8 服务器环境中运行的,因此 ASLR 解释了为什么每个程序集缺少特定的基地址以及由此产生的变基不会导致问题。尽管如此,这些不是本机 PE 映像的事实似乎应该导致这些程序集的代码存储在私有页面中。

当我们开始研究使用 NGen 来减少内存压力时发现了这一点,但实际上发现它增加了工作集的大小——因为 JIT 的程序集已经被共享。

我发现的最新参考资料在这里,这又与我们的实际发现不同:

http://blogs.msdn.com/morgan/archive/2009/03/07/developing-net-applications-for-deployment-on-terminal-services-or-citrix.aspx

编辑:我应该补充一点,自从第一次发布问题以来,Windows Server 2003 测试盒上的更多实验也显然表明 JIT 的程序集在进程之间是可共享的。我仍然很难理解为什么我能找到的所有建议都表明 NGen 是必需的,但所有现实世界的证据都与此相矛盾。我真的希望这里的专家能提供一些启示。

谢谢!

编辑:我已经把我所有的 .NET / CLR 书籍都掸掉了,但我已经没有办法尝试解决这个问题了;谁会通过帮助消除“我不明白发生了什么”的那种可怕的唠叨感觉来度过我的一天!?!:)