【发布时间】:2011-01-31 10:56:12
【问题描述】:
检查对象上的空引用最有效的方法是什么?我见过各种代码示例,它们有不同的检查方式,以下哪一种是最有效的,还是被认为是最佳实践的?
Object.ReferenceEquals(item, null)
item == null
item != null
Object.Equals(item, null)
谢谢
【问题讨论】:
-
假设其中一个比其他的慢 10 倍,而您使用了它。你会注意到吗?仅当它位于罕见的昂贵热点时。
-
@MikeDunlavey:当然,选择比所提供的任何其他选项慢 10 倍的选项是完全愚蠢的(假设其他选项在语义上是正确的)。如果替代方案是愚蠢的并且不会带来任何额外的好处,那么优化并不是为时过早。
-
@EdS.:也许这是愚蠢和愚蠢的,但人们总是这样做,如果它在性能不是问题的代码中,那真的没问题。每当人们
new任何事情时,他们都会花费大量的周期,如果他们使用解释性语言,他们会付出 1-2 个数量级的速度比。 -
@MikeDunlavey:人们一直都在做很多愚蠢的事情,但这并不能解决问题。您无法在 C# 中使用 new 进行比较,因为它是强制性的。不了解他们正在编写的代码的含义的开发人员/工程师是不称职的。
-
我支持那些说要使用 == 和 != 的人。编译器可能会将该语法转换为 Object.Equals(item, null) 或 ReferenceEquals(item, null) 或其他东西(毕竟更改代码是编译器所做的),但除非你已经分析了你的运行,否则清晰是你的首要任务代码并知道您有性能问题
标签: c# performance