c# – 字段与属性的实际性能

我正在做一些后期建立的CIL编织,将CIL添加到程序集中的所有方法(换句话说,吨的方法).每个方法检查特定值是否为空.示例(C#反射器版本的CIL代码):
// CIL woven region start
if (MyType.Something == null) {
 // ... some new stuff
}
// CIL woven region end

将MyType.Something作为属性与字段的性能影响是什么?我知道我读过C#编译器执行特殊的优化,在这种情况下应该没有性能影响…但是直接的CIL代码(没有C#编译器)的情况呢?还是JIT编译器允许这些优化(所以直接的CIL代码还是有好处的)?

将会为静态属性的访问者发出OpCode.Call的性能比Ldsfld的性能更差(考虑到这是由成千上万的调用引起的,因为程序集中的每个方法都是编织的)?

谢谢.

解决方法

在开发SlimDX的数学库时,我们发现,在.NET 3.5 SP1框架下,使用数学类型成员的字段(如X,Y,Z为Vector3),与性能相比,性能提升不成比例.换句话说,对于大量访问属性的小数学函数,差异是显着的.

自从.NET 3.5 SP1(见JIT inling)以来,这一点得到了改进.虽然我相信之前的JIT仍将内联小型方法(属性完全是简单的方法),但是在早期的框架中存在一个错误,它阻止了内置使用或返回值类型的方法.

请注意,当时的差异还是很小的.我仍然会选择使用属性,除了最具性能的关键情况.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...