C#字符串查找速度優化--StringComparison.Ordinal

本文一些資料參考自https://blog.csdn.net/sinat_27657511/article/details/52275327,感謝這位博主

下面就來談下StringComparison。

 

public enum StringComparison

 {

CurrentCulture,

CurrentCultureIgnoreCase,

InvariantCulture,

InvariantCultureIgnoreCase,

Ordinal,

OrdinalIgnoreCase

}

 

CurrentCulture 使用區域敏感排序規則和當前區域比較字符串。

CurrentCultureIgnoreCase 使用區域敏感排序規則、當前區域來比較字符串,同時忽略被比較字符串的大小寫。

InvariantCulture 使用區域敏感排序規則和固定區域比較字符串。

InvariantCultureIgnoreCase 使用區域敏感排序規則、固定區域來比較字符串,同時忽略被比較字符串的大小寫。

Ordinal 使用序號排序規則比較字符串。

OrdinalIgnoreCase 使用序號排序規則並忽略被比較字符串的大小寫,對字符串進行比較。

 

StringComparison.Ordinal       

在進行調用String.Compare(string1,string2,StringComparison.Ordinal)的時候是進行非語言(non-linguistic)上的比較,API運行時將會對兩個字符串進行byte級別的比較,因此這種比較是比較嚴格和準確的,並且在性能上也很好,一般通過StringComparison.Ordinal來進行比較比使用String.Compare(string1,string2)來比較要快10倍左右.(可以寫一個簡單的小程序驗證,這個挺讓我驚訝,因爲平時使用String.Compare從來就沒想過那麼多).StringComparison.OrdinalIgnoreCase就是忽略大小寫的比較,同樣是byte級別的比較.性能稍弱於StringComparison.Ordinal.

 

string類型中的Contains類型默認使用了Ordinal方式,所以速度會很快

其他的方法例如IndexOf,CompareTo等都默認使用了CurrentCulture方式,所以速度會相對比較滿,可以調用的時候顯示聲明StringComparison的方式,速度會快很多,下面是測試:

在約1500個字符中查找一個字符‘q’,位於該序列的結尾處。

使用Ordinal方式的速度:

不使用Ordinal方式:

對比發現速度確實快了很多,在文本約龐大時候,效果會更加的明顯。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章