[英]Check if object is null - performance differences
在使用ANTS Performance Profiler進行性能分析時,我剛剛在應用程序中發現了一個奇怪的行為:
public void set_SelectedObject(object value)
{
if (value == null) //65ms
{
//do anything
}
}
此檢查需要65毫秒,而其他檢查對象是否為null的檢查則小於0,Xms。 這可能是什么原因? 我認為無論傳遞什么值,空檢查始終是常數-它是否取決於對象的大小?
廢話 將值檢查為null總是會對您的性能產生類似的影響。 這可能需要65毫秒,因為您要發送給該方法的引用實際上可能為null,這會觸發if
語句或相反對象內的邏輯-當對象不是null時,會觸發大量邏輯。
我可以想象的唯一理論上的原因是,您對某些類使用了重載的==運算符,但是如果它不首先檢查null的話,那將是一段很糟糕的代碼。
探查器的鑄鐵法則是絕對結果不准確或不重要。 它們僅用作比較工具-即在更改X或不更改X的情況下,我的代碼是否更快? 就是說,65ms仍然是相當大部分的時間,除非分析器確實很差,否則不應因分析器差異而出現。
我沒有使用過C#ANTS探查器,如果它為您提供了像這樣的單行代碼的計時,我會感到驚訝。 您確定不是時候執行由if語句包圍的整個塊了嗎?
如果它只是給您一點時間,那意味着正在進行函數調用-即值類上的運算符重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.