![]() |
1
10
以下是mscorlib中解压缩的valuetype.equals方法:
在可能的情况下,将进行一点明智的比较(注意canCompareBits和fasteQualscheck,这两个都定义为InternalCall)。JIT可能会在这里注入适当的代码。至于为什么这么慢,我不能告诉你。 |
![]() |
2
10
它不使用反射
当它不需要的时候
. 它只是一点一点地比较数值,以防
速度慢的原因是
您可以手动为
|
![]() |
3
3
编译器生成函数的想法是合理的。 考虑到效果,但是我认为语言设计团队做得对。C++中已知的编译生成器方法对于初学者来说是很难理解的。让我们看看自动生成的结构在C中会发生什么。等于: 现在,.equals()的概念很简单:
如果编译器总是创建equals方法,我们可以有:
现在我们的结构有一个代码阅读器看不到的自动生成的重写方法!那么,您如何知道基方法object.equals不适用于您的结构呢?通过学习自动编译器生成方法的所有情况。这正是学习C++的负担之一。 如果让高效结构等于用户并保持概念简单,需要一个标准的默认等于方法,那么将是一个明智的决定。 也就是说,性能关键结构应该重写equals。下面的代码显示 三千六百零六 VS 53毫秒 在.NET 4.5.1上测量 这种性能的提高当然是由于避免了虚拟的等号,但是无论如何,如果虚拟的object.equals被称为增益会低得多。性能关键的情况不会调用object.equals,但是这里的增益将适用。
也见 http://blog.martindoms.com/2011/01/03/c-tip-override-equals-on-value-types-for-better-performance/ |
![]() |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
![]() |
kernel · 打印结构数组内容时出错 2 年前 |
![]() |
mwitz · 在Rust中无法正确写入结构的函数属性 2 年前 |
![]() |
Ulysses · 无法访问结构字段(Rust) 2 年前 |
![]() |
Tor · 使用Box<None>值初始化struct 2 年前 |
![]() |
Yestin · Golang如何初始化数组结构[duplicate] 2 年前 |