微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/csharp/93268.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐