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仍将内联小型方法(属性完全是简单的方法),但是在早期的框架中存在一个错误,它阻止了内置使用或返回值类型的方法.

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...