我只是在我的应用程序发现了一个怪异的行为,而这样做有蚂蚁性能探查器性能分析:检查对象为空 - 性能差异
public void set_SelectedObject(object value)
{
if (value == null) //65ms
{
//do anything
}
}
这个检查需要为65μs,而其他检查对象空少取比0,Xms。 这可能是什么原因?我认为无论传递什么值,空检查总是不变 - 它是否取决于我的对象的大小?
我只是在我的应用程序发现了一个怪异的行为,而这样做有蚂蚁性能探查器性能分析:检查对象为空 - 性能差异
public void set_SelectedObject(object value)
{
if (value == null) //65ms
{
//do anything
}
}
这个检查需要为65μs,而其他检查对象空少取比0,Xms。 这可能是什么原因?我认为无论传递什么值,空检查总是不变 - 它是否取决于我的对象的大小?
轮廓仪的铸铁规则是绝对结果不准确或不重要。它们仅用作比较工具 - 即我的代码更快更改或不更改X?也就是说,65ms仍然是一个很大的时间段,除非分析器非常糟糕,否则不应该出现分析器变化的结果。
我还没有使用C#ANTS分析器,如果它给了你这样一行代码的时间,我会感到惊讶。你确定现在不是执行if语句所包围的整个块的时候吗?
如果它为您提供了一段时间,那意味着正在进行函数调用 - 即值类上的运算符超载。
你是对的,时间显示在equasion的行,但我想这是显示整个if-else语句的时间...... – Frame91
这是无稽之谈。根据null检查值总是会对您的性能产生类似的影响。这可能需要65毫秒,因为您发送给方法的引用实际上可能为空,这会触发您的if
语句或oposite中的逻辑 - 当对象不是null时,会触发一些重逻辑。
我可以想象的唯一理论原因是你为一些类使用了一个重载的==操作符,但是如果它不首先检查null,它必须是非常差的一段代码。
它不应该。我认为要么这不是你的实际代码,要么你误解了剖析器的结果。你确定它不是执行65ms的*整个*方法吗? – dcastro
命中次数是多少?可能是一个庞大的数字? –
感谢您的回答。我放出的是事实,这个方法是由Reflector“生成”的。该类是DevExpress中的一个Grid。可能是反射器没有捕获PropertyChangedEvent或其他的依赖关系?命中次数是4,但我已经通过这个值分割了时间(实际上它总共是258ms) – Frame91