检查对象是否为空-性能差异
本文关键字:性能 对象 是否 检查 | 更新日期: 2023-09-27 18:12:29
在使用ANTS性能分析器进行性能分析时,我刚刚发现应用程序中有一个奇怪的行为:
public void set_SelectedObject(object value)
{
if (value == null) //65ms
{
//do anything
}
}
此检查需要65ms,而其他检查对象是否为空所需的时间小于0,Xms。这可能是什么原因呢?我认为空检查总是不变的,无论什么值传递-它取决于我的对象的大小?
对于分析器来说,绝对的结果是不准确或不重要的。它们只作为一个比较工具有用——也就是说,我的代码在做了X修改后还是没有做X修改后更快?也就是说,65ms仍然是一段相当长的时间,不应该因为分析器的差异而出现,除非分析器真的很糟糕。
我没有使用过c# ANTS分析器,如果它能给你这样的一行代码计时,我会很惊讶的。你确定现在不是执行if语句包围的整个代码块的时候吗?如果它只给出了那一行的时间,这意味着正在进行函数调用-即对值类进行操作符重载。
胡说八道。检查值是否为null总是会对性能产生类似的影响。它可能需要65毫秒,因为你发送给方法的引用可能实际上是一个null,这会触发你的if
语句中的逻辑,或者相反-当对象不是null时,会触发一些沉重的逻辑。
我能想到的唯一理论上的原因是您对某些类使用了重载==操作符,但如果它不首先检查null,那么它将是一段非常糟糕的代码。