![]() |
1
2
在许多情况下,这种差异纯粹是审美上的和主观上的,但是想到一个与另一个的原因有三个:
|
![]() |
2
2
当您从一个线程调用某个方法时,这种方法可能有助于保护您不受这种情况的影响,但是在您检查m_字段是否为空后,控件将传递给另一个线程,该线程将其设置为空。然后控件返回到第一个线程,但它仍然认为m_字段!=null,这可能会导致nullreferenceexception 据我所知,在里希特的“CLR Via C”一章中有几个关于它的词。 |
![]() |
3
0
这可能只是对编译器的一个提示,即应该将字段读入寄存器,而不是在内存中重复访问它。没有什么理由第一个版本应该是 更糟的 比你列出的第二个更明智。它与编译器生成的代码几乎相同。将对象字段读入寄存器,测试它是否为空,根据需要修改它,然后将其写回内存中的对象字段。 |
![]() |
4
0
ms.net jit可以 register allocation . 对于这样一个简单的情况,这个临时变量应该被保存在寄存器中,而不是堆栈中。然后,生成的x86字节代码的运行速度应该比在非空情况下读取类成员两次(一次检查空值,一次返回)和在空情况下读取更快。 代码生成器通常必须将更改写入 物体 一旦它们发生,并在每次引用对象字段时从中读取,否则在某些情况下,线程可能 从未 请参见另一线程对对象所做的更改,反之亦然。 但是如果 地方的 使用变量编译器假定它不必对局部变量进行更改(甚至不必将其存储在堆栈中),因为访问另一个线程的局部变量不是C允许的。 |
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 3 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 3 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 7 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 7 年前 |
![]() |
Tanvi Jaywant · 如何重载类 7 年前 |