.NET程序集缓存/ ngen / jit图像预热和冷却行为

时间:2009-09-14 19:23:55

标签: .net gac jit ngen rebasing

我有一个通过C ++ / CLI使用C#.NET 2.0 DLL构建的输入法(IME)程序。由于IME始终附加到另一个应用程序,因此C#.NET DLL似乎无法避免图像地址重新定位。

虽然我已经应用了ngen来创建该C#.NET 2.0 DLL的本机映像并将其安装到全局程序集缓存中,但它没有太大改进,大约12秒。低至9秒。在缓慢的PIII级PC上。

因此,我使用一个小应用程序,它在启动时加载C#.NET DLL引用的所有组件,以“预热”该DLL的本机映像。它可以很好地将加载时间加快到0.5秒。

然而,它只运作了一段时间。大约30分钟之后,它似乎再次“冷静下来”。

有没有办法控制GAC或原生图像的行为始终“热”?这恰好是图像地址重新定位的问题吗?

1 个答案:

答案 0 :(得分:0)

我认为,任何可能的框架库和CLR本身都在Windows缓存中。

你可能会发现一个小应用程序只是坐在后台,可能每分钟写一个字节到一个文件(或者其他一些无意义的任务提供足够的活动来保存所有相关文件加载到缓存中)会做足以使事情变得“温暖”。

至少值得一试 - 根本不应该写很长时间。