哪個更快?這:c#性能:類型比較與字符串比較
bool isEqual = (MyObject1 is MyObject2)
或者這樣:
bool isEqual = ("blah" == "blah1")
這將有助於找出哪一個更快。顯然,如果你像程序員經常做的那樣將.ToUpper()應用到字符串比較的每一側,那就需要重新分配影響性能的內存。但是如果.ToUpper()與上面的示例中的等式不同,那麼該怎麼辦?
哪個更快?這:c#性能:類型比較與字符串比較
bool isEqual = (MyObject1 is MyObject2)
或者這樣:
bool isEqual = ("blah" == "blah1")
這將有助於找出哪一個更快。顯然,如果你像程序員經常做的那樣將.ToUpper()應用到字符串比較的每一側,那就需要重新分配影響性能的內存。但是如果.ToUpper()與上面的示例中的等式不同,那麼該怎麼辦?
你如何告訴我? :)
從this Coding Horror post取得代碼,並插入代碼以代替他的算法進行測試。
第一個用於比較類型而不是值。 如果你想比較非敏感字符串的情況下,你可以使用:
string toto = "toto";
string tata = "tata";
bool isEqual = string.Compare(toto, tata, StringComparison.InvariantCultureIgnoreCase) == 0;
Console.WriteLine(isEqual);
據該書最大化.NET性能 通話
bool isEqual = String.Equals("test", "test");
在性能上等同於
bool isEqual = ("test" == "test");
致電
bool isEqual = "test".Equals("test");
在理論上比調用靜態String.Equals方法要慢,但我認爲您需要比較幾百萬個字符串才能真正檢測速度差異。
我的建議是這樣的;不要擔心哪個字符串比較方法更慢或更快。在一個正常的應用程序中,你將永遠不會注意到這種差異你應該用你認爲最具可讀性的方式。
與「==」操作符比較字符串比較內容的字符串與字符串對象參考的。比較對象將調用對象的「Equals」方法來確定它們是否相等。 Equals的默認實現是進行參考比較,如果兩個對象引用是相同的物理對象,則返回True。這可能會比字符串比較更快,但取決於被比較的對象的類型。
我在這裏有點困惑。
正如其他答案已經指出,你正在比較蘋果和橘子。 ::rimshot::
如果要確定對象是否屬於某種類型,請使用is
運算符。
如果您想比較字符串,請使用==
運算符(或其他適當的比較方法,如果您需要像大小寫不區分大小寫的比較)。
一個操作與另一個操作相比有多快(無雙關語)似乎並不重要。
仔細閱讀後,我認爲,要串comparisions的速度與基準比較的速度(在System.Object的基本類型中使用的比較類型)進行比較。
如果是這樣,那麼答案是參考比較決不會比任何其他字符串比較慢。 .NET中的參考比較與C中的指針比較非常類似 - 大概可以得到。
但是,你怎麼會覺得如果一個字符串變量s
的值爲"I'm a string"
,但下面的比較失敗:
if (((object) s) == ((object) "I'm a string")) { ... }
如果單純比較基準,即可能發生的事情取決於s
值是如何創建。如果最終沒有被執行,它將不會與文字字符串具有相同的引用,所以比較會失敗。所以你可能有一個更快的比較,並不總是奏效。這似乎是一個糟糕的優化。
其他答案已經錯過了關鍵點,即「is」操作符不會像提問者認爲的那樣做任何事情。 – 2008-11-15 01:48:47
我假設比較你的第一個例子中的對象的速度要快,因爲它只是檢查兩個對象是否指向內存中的相同地址。
正如已經多次提到過的那樣,也可以比較字符串上的地址,但如果兩個字符串是從不同的來源分配的,則這不一定有效。
最後,它通常是很好的形式,只要有可能,就嘗試和比較基於類型的對象。它通常是最具體的識別方法。如果你的對象需要用內存中的地址以外的東西來表示,那麼可以使用其他屬性作爲標識符。
你錯過了「is」運算符的含義,我想呢? – 2009-12-28 10:48:39
如果我沒有理解這個問題,你真的想比較基準平等普通的老「比較內容」:建立一個測試用例,並呼籲object.ReferenceEquals反對== B的情況。
注意:您的有以瞭解它們之間的區別,並且您可能無法在大多數情況下使用參考比較。如果你確定這是你想要的,可能快一點。你必須自己嘗試一下,並評估這是否值得麻煩。
是Nicholas J. Wienholt的作者?你會認爲這是一個推薦閱讀? – JSWork 2011-05-02 21:04:31