String.Compare的替代品,用于提高性能

时间:2011-08-08 11:40:29

标签: string optimization c#-4.0

我在我的C#应用​​程序中使用了一个分析器,并意识到String.Compare()总体上耗费了大量时间:总时间的43%,124M命中率

我正在比较相对较小的字符串:从4到50个字符。 你会建议用性能来替换它吗?

UPD:我只需要判断2个字符串是否相同。字符串可以是零或“”。没有文化方面或任何其他方面。大部分时间它都是“4578D”而不是“1235E”或类似的。

非常感谢提前!

2 个答案:

答案 0 :(得分:4)

这取决于您想要进行的比较。如果你只关心相等性,那么使用Equals重载中的一个 - 例如,更快地发现两个字符串的长度不同于比较它们的内容。

如果您对序数比较感到满意,请明确指出:

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

序数比较很多比文化敏感的比较快。

当然,这假设顺序比较为您提供了所需的结果 - 正确性通常比性能更重要(尽管并非总是如此)。

编辑:好的,所以想要测试是否相等。我只使用==运算符,该运算符使用序数相等比较。

答案 1 :(得分:1)

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

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

进行序数比较可能比文化相关比较快两倍。

如果对相等进行比较,并且字符串不包含任何文化依赖字符,则可以很好地使用序数比较。