gpt4 book ai didi

c# - .NET JIT 编译代码缓存在哪里?

转载 作者:IT王子 更新时间:2023-10-29 03:52:28 26 4
gpt4 key购买 nike

.NET 程序首先被编译成 MSIL 代码。当它被执行时,JIT 编译器会将其编译成本地机器码。

我在想:

这些 JIT 编译的机器代码存储在哪里?它只存储在进程的地址空间中吗?但是由于程序的第二次启动比第一次快得多,我认为即使在执行完成后,这段 native 代码也一定存储在磁盘的某个地方。但是在哪里呢?

最佳答案

内存。它可以被缓存,这是 ngen.exe 的工作。它生成程序集的 .ni.dll 版本,其中包含机器代码并存储在 GAC 中。之后会自动加载,绕过 JIT 步骤。

但这与您的程序第二次启动速度更快的原因无关。第一次你有一个所谓的“冷启动”。这完全取决于在硬盘驱动器上查找 DLL 所花费的时间。第二次热启动时,DLL 已在文件系统缓存中可用。

磁盘很慢。 SSD 是一个明显的解决方案。

Fwiw:这不是托管代码独有的问题。具有大量 DLL 的大型非托管程序也有它。大多数开发机器上都有两个典型示例,即 Microsoft Office 和 Acrobat Reader。他们作弊。安装后,他们会在运行注册表项或启动文件夹中放置一个“优化器”。这些优化器所做的就是加载主程序使用的所有 DLL,然后退出。这会启动文件系统缓存,当用户随后使用该程序时,它会快速启动,因为它的热启动速度很快。

就我个人而言,我觉得这非常烦人。因为他们真正做的是减慢我登录后可能想要启动的任何其他程序的速度。很少有 Office 或 Acrobat。我特别强调要删除这些优化器,如果有必要,当一个爆炸式更新将其恢复时重复删除。

你也可以使用这个技巧,但请负责任地使用它。

关于c# - .NET JIT 编译代码缓存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com