簡體   English   中英

檢查對象是否為空-性能差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM