问题标签 [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 投票
3 回答
6606 浏览

installation - Visual Studio 2012 安装:ngen 挂起/什么也不做

我一直在尝试安装 Visual Studio 2012 Professional RC(从 Windows 7 x64 上的 VS 11 Beta 升级),我发现安装程序似乎在看似任意的时间“挂起”。我使用引号,因为安装程序 UI 仍然完全响应;它似乎只是坐在那里,拒绝再往前走。我观察到的情况如下:

  • msiexec.exe 的一个实例(32 位,作为 SYSTEM 运行)固定我的 4 个内核之一。
  • vs_professional.exe 的 2 个实例似乎正在运行(都使用我的身份)。其中一个(主 UI 实例)一直在使用 1-2% 的 CPU,大概是在它执行业务时查看进度条是否必须更新等;另一个实例似乎根本不使用任何 CPU。
  • ngen.exe 的一个实例似乎无所事事,即没有CPU 使用率。

当我运行安装程序并指定日志文件位置时,我可以看到安装程序为它成功安装的所有组件生成日志文件。当它到达“挂起”的包时(每次运行安装程序时都不同),每次的共同点是它刚刚调用 ngen.exe 以在安装期间生成本机映像。 无论我是尝试进行安装、卸载还是修复,都会发生此挂起

我试过让机器在一夜之间完成它的工作,有时长达 16 个小时,当我回来时它仍然卡在同一点。如果我从 UI 取消设置,我会在 UI 中看到一条消息“正在停止当前会话”,但似乎没有任何反应。如果我终止 ngen.exe 进程,我可以在日志文件中看到安装程序开始生成/卸载另一个本机映像,这再次导致挂起。如果我在 UI 中单击取消后终止了非活动的 vs_professional.exe,安装将成功结束,并显示“X of Y components were installed/uninstalled successfully”消息。

有什么想法/建议吗?我想尽办法收拾这个烂摊子!

0 投票
2 回答
868 浏览

.net - 没有安装程序的 Ngen

我以前没有使用 NGen,但现在我需要提高我的 WPF 应用程序的启动性能。据我了解,常见情况是在应用程序安装期间运行 ngen 。但是我的应用程序用于满足公司内部需求并且没有安装程序(它只会使事情复杂化)。

还有其他运行ngen的方法吗?如果我在第一次启动应用程序时这样做怎么办?我需要管理员权限吗?

0 投票
2 回答
836 浏览

.net - JIT 与 NGen 的冷启动和热启动

我想了解 JIT 和 NGen 之间的区别,请帮助我。JIT 是否缓存二进制代码?如果是,则意味着 NGen 只能提高冷运行性能。但我读过一些相反的文章:NGen 仅能显着改善热启动。

0 投票
2 回答
531 浏览

.net - .NET 4.0 NGEN x64 程序集上的符号解析不起作用

我在 x64 NGEN .NET 4.0 程序集上的符号解析不起作用。

细节:

我有一个 .NET 4.0 命令行程序集,我正在使用带有 x64 配置的 Visual Studio 进行编译。编译后,我在上面运行 NGEN(64 位版本)。

XPERF 分析无法解析我的符号的调用堆栈(使用 -stackwalk 配置文件)失败。我现在正在从这里尝试 Perfmonitor:http: //bcl.codeplex.com/releases/view/42784

我已经完成了这些步骤,并且希望调用堆栈能够解决:

  • 启动 NGEN 的 x64 应用程序
  • 性能监控收集
  • 性能监视器合并
  • 性能监控分析

...不幸的是,堆栈跟踪在 PerfMonitor 中也不起作用。

我还尝试将应用程序作为 32 位运行——同样的问题。我的符号使用 symchk /v 检查得很好

我不知道如何调试这个损坏的堆栈跟踪功能。

0 投票
0 回答
213 浏览

.net - Process Explorer 如何确定程序集标志?

有人知道 Process Explorer 如何确定此处显示的这些标志吗?

在此处输入图像描述

是否有用于此的 .NET Api?

我对 Native 标志特别感兴趣。CodeBase我尝试在orLocation属性上确定这一点。但这些似乎总是只返回 DLL 的路径,而不是本机映像的路径。

有任何想法吗?我被困住了。

0 投票
1 回答
338 浏览

.net - 在 app.config 中使用 supportedRuntime 元素时,我应该使用哪个 ngen.exe?

我将 .net 2.0 和 .net 4.0 的 ngen.exe 与 NSIS 安装程序中的 .net 3.5 应用程序捆绑在一起。我没有找到任何其他方法可以做到这一点,所以我正在捆绑它。

我的 app.config 文件中有以下内容。

我也在使用其他没有上面代码的 app.config。其他 app.config 仅在 pc 上安装了 .net 3.5 时使用。我的问题是如果用户没有安装 .net 3.5,我应该使用哪个版本的 ngen.exe?

0 投票
2 回答
2304 浏览

ngen - 如何在 WPF 应用程序中使用 Ngen.exe?

我想提高 WPF 页面的启动性能,因为它需要更多的时间来加载。Ngen.exe 是否提高了性能,我如何在 WPF 应用程序中使用它

0 投票
2 回答
682 浏览

.net - 使用 NGEN 更新 RemoteAPP 应用程序的正确方法

我们在 RDS 服务器上有一个 Windows2008R2 RemoteAPP .NET 4.5 应用程序 NGEN-ed,大约。3 主机 NLB 群集的 300 个并发用户。

该应用程序正在积极开发中,需要经常更新(即替换为新的)RemoteAPP 部署的程序集。

我们目前的做法如下:

  1. 重命名要在 RemoteAPP 服务器上更改的文件,用户连接到它(如果文件被加载,操作系统将不允许文件被覆盖),
  2. 写新文件而不是旧文件,
  3. NGEN 安装新程序集(无需先卸载旧程序集!),
  4. 通知用户(通过应用程序本身)应用程序版本已更改,需要重新启动,
  5. 逐渐允许用户按照自己的节奏重新启动应用程序(同时重新启动应用程序会导致磁盘和 CPU 负载增加,从而损害服务器性能)。对于集群中的所有主机也是如此。

在此之后,服务器偶尔会出现蓝屏崩溃并出现 Microsoft-Windows-Kernel-Power EventID 41 严重错误 - 我强烈谴责我们的更新实践对此负责。

因此,问题是:在不必终止访问旧程序集的进程的情况下更新 RemoteAPP 应用程序和 NGEN 新程序集的推荐方法是什么(即允许用户在他们喜欢时继续并重新启动)。

谢谢你。

0 投票
1 回答
143 浏览

.net - 调试 JIT 程序集时读取实例字段

在过去的几周里,我一直在玩弄非托管 .NET 调试 API

虽然 MSDN 记录了接口本身,但为了了解如何以任何有意义的方式实际使用它们,我求助于各种博客(主要是Mike Stall 的)和CLR 托管调试器示例ILSpy 源中的托管包装器。最后,我能够将我的测试程序附加到正在运行的进程,设置断点并点击它们。

接下来我想做的是在遇到这样的断点时,读取相关对象实例的字段。当调试目标方法没有经过 NGEN 或 JIT 时,通过禁用加载 NGEN 程序集(环境设置“COMPLUS_ZAPDISABLE=1”)和禁用 JIT 优化(又名“.ini 文件技巧”),这可以正常工作)。

但是,当我对我的理想目标(零售优化(NGEN/JIT'ed)代码)进行相同尝试时,它不起作用。例如:我可以在点击入口断点时仍然检索方法参数的数量,但我无法获取第一个参数本身(调试 API 会引发异常)。

现在,我想这是因为调试 API 应该是平台独立的,在这种情况下,程序集不再是。但是,如果我接受这个平台对英特尔的依赖怎么办:据我所知,CLR 使用fastcall 调用约定,在这种情况下,ECX 寄存器包含第一个方法参数(成员函数的隐式“this”引用) .

我对此进行了测试,实际上在到达断点时,ECX 在 NGEN 的程序集中包含了 OBJECTREF(对象实例的地址)。

现在读取实例字段的最后一步是检索相对于该指针的字段偏移量,这就是我卡住的地方,因为我似乎无法找出 CLR在本机代码生成期间如何打包实例字段.

我意识到这可能取决于 CLR 版本/实现,但显然有办法,因为带有 SOS 扩展的 WinDbg 能够找到这种布局。如果不通过调试 API,我可以以某种方式利用 SOS.dll 吗?

0 投票
1 回答
602 浏览

c# - 如何使用 C# 和 ngen.exe 为 Win32 构建本机映像

是否可以从 C# 构建本机应用程序,例如当您使用纯 C/C++ 并为 Win32 开发时。

我听说过 ngen.exe 并尝试使用它......但我不明白它在做什么?它就像它缓存应用程序是一些系统目录以便快速快速并为应用程序提供一些优化,但不生成本机图像。

为什么它命名为“本机生成器”,它不为 Win32 生成本机输出并且仍然需要 .net 虚拟机?