假设我的解决方案中有一个C#Windows类库,我在VS2010 IDE中构建它。 我的bin目录中的输出是X.dll
1) X.dll在此阶段不包含MSIL,但是“压缩字节代码”。
这是真的吗?
2)这个“压缩字节代码”以某种方式转换为MSIL 这是什么时候发生的?
3)当访问X.dll时,CLR的JIT编译器会将需要转换的MSIL部分转换为机器代码。
我对这最后一部分有好处吗?
有人可以帮我填补我理解的空白吗?
答案 0 :(得分:2)
X.dll包含MSIL字节码。你可以用ildasm反汇编来证明这一点。
在程序集加载和代码的实际执行之间的某个时间,MSIL被转换为本机代码。我不熟悉这是做什么的,但我会怀疑装配负荷。
答案 1 :(得分:0)
为了建立Dark Falcon的响应,问题2,IL代码(非压缩字节代码)由JIT编译器逐个方法地在每次第一次调用时转换为本机代码。因此,对于2号的较短答案是“首次访问该方法时”。字段不受此限制,属性本身就是伪装方法。
关于第三个问题,不,IL在加载时不会被JITed。见上文。