2011-08-08 37 views
3

我用了一個探查我的C#應用​​程序,並意識到,String.Compare()正在採取了大量的時間總:43%的有124M的總時間命中替代String.Compare性能

我比較相對較小的字符串:從4到50個字符。 你會推薦什麼來取代它的性能?

UPD:我只需要確定2個字符串是否相同。字符串可以是零或「」。沒有文化方面或任何其他方面。大多數情況下,它將是「4578D」,而「1235E」或類似。

非常感謝提前!

+0

這取決於你的用例!你想讓文化意識的比較與否? –

+0

我只關心2個字符串是否相等。我會把更新。感謝您指出。 – trailmax

回答

4

這取決於你想做什麼樣的比較。如果您只關心平等,則使用Equals重載之一 - 例如,發現兩個字符串具有不同的長度比比較其內容更快。

如果你是快樂與序號比較,明確規定:

int result = string.CompareOrdinal(x, y); 

的序號比較可能比一個文化敏感的一個快

當然,這假設序數比較會給你你想要的結果 - 正確性通常比性能更重要(雖然不總是)。

編輯:好的,所以你只有想要測試平等。我只是使用==運算符,它使用了序數相等比較。

+0

我所關心的是2個字符串是否相同。我會放棄它。謝謝喬恩!名人在我的話題 - 受寵若驚 - ) – trailmax

+0

@trailmax:在這種情況下,你絕對不應該使用'比較'開始。編輯完成後,只需使用'=='即可。 –

+0

我在第一個版本中有==,然後更改爲Compare(),因爲其中一個字符串爲空。並且首先懶得把null比較。 – trailmax

1

您可以使用不同的方式比較字符串。

String.Compare(str1, str2, StringComparison.CurrentCulture) // default 
String,Compare(str1, str2, StringComparison.Ordinal) // fastest 

進行序數比較可以是比文化相關比較快兩倍。

如果您比較相等性,並且字符串不包含任何文化依賴性字符,則可以很好地使用序數比較。