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

前端之家收集整理的这篇文章主要介绍了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仍将内联小型方法(属性完全是简单的方法),但是在早期的框架中存在一个错误,它阻止了内置使用或返回值类型的方法.

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

猜你在找的C#相关文章