以下代码(由Vitaliy Liptchinsky提供)遍历程序集中的所有类型,并在所有方法上调用PrepareMethod.这会改善冷启动延迟吗?
Thread jitter = new Thread(() =>
{
foreach (var type in Assembly.Load("MyHavyAssembly, Version=1.8.2008.8," +
" Culture=neutral, PublicKeyToken=8744b20f8da049e3").GetTypes())
{
foreach (var method in type.GetMethods(BindingFlags.DeclaredOnly |
BindingFlags.NonPublic |
BindingFlags.Public | BindingFlags.Instance |
BindingFlags.Static))
{
if (method.IsAbstract || method.ContainsGenericParameters)
continue;
System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod(method.MethodHandle);
}
}
});
jitter.Priority = ThreadPriority.Lowest;
jitter.Start();
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
它不会让启动更快 - 毕竟,它比通常更早地工作,而不是更晚.实际上可能会稍微减慢启动速度,因为当您的应用程序尝试启动时,您将有另一个线程正在工作.
这意味着在线程完成时,您第一次调用方法时不应该看到正常(微小)JIT延迟.(当然也有构造函数,但如果需要,可以包含它们.)
此外,它可能意味着更早的内存将被使用,并且JIT处理方法可能涉及一些锁定,这意味着您的"主"线程可能需要偶尔等待.
我个人不会"真实地"使用它,除非我有一些非常好的证据表明它实际上有所帮助.通过各种方式测试它并试图获得这样的证据.如果您不介意启动时间,但是当您实际使用该应用程序时需要快速响应时间,则可能有所帮助.
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |