Wal*_*ich 11
NGEN是一个明显的答案,但我要指出,JIT编码可以更快,因为它"知道"运行时NGEN无法做到的事情.我们使用这个事实在运行时根据.config文件中的设置逐字地丢弃代码行:
static readonly bool _EnableLogging = LoadFromConfigFile("EnableLogging");
if (_EnableLogging && log.IsDebugEnabled)
{
//Do some logging
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,NGEN必须在代码中保留if语句,因为它不知道_EnableLogging字段的值是什么.但是,JIT确实知道了这个运行的值,如果它是假的,那么if语句就不会被处理,并且JIT将从它生成的机器代码中省略整个if语句,从而导致代码库更小,因此更快的代码库.
如果在安装时有CPU信息,则不必避免JIT.
如果使用/ platform:[x86/x64/IA64]开关编译模块,编译器将在生成的PE文件中包含此信息,以便CLR将代码JIT到适当的CPU本机代码中并优化代码CPU架构.
你可以使用NGEN,是的,但只有当你想要改进应用程序的启动时,由于运行过程中减少了工作集而不是你本可以避免JITting.您需要实际比较NGEN文件的性能与非NGEN文件的性能,以确保NGEN的文件更快.
NGEN不能像JIT编译器那样对执行环境做出尽可能多的假设,因此会产生未经优化的代码.
例如:它为静态字段访问添加了间接性,因为静态字段的实际地址仅在运行时才知道.
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |