Wil*_*sem 32 c# string performance
C#中字符串类型最快的内置比较方法是什么?我不介意印刷/语义含义:目的是在排序列表中使用比较器,以便在大型集合中快速搜索.我认为只有两种方法:Compare和CompareOrdinal.什么是最快的?
另外,这些字符串比较是否有更快的方法?
Jon*_*eet 57
我假设你想要一个小于/等于/大于比较而不仅仅是平等; 平等是一个略有不同的主题,虽然原则基本相同.如果你实际上只寻找存在的东西就像一个SortedList,我会考虑使用Dictionary<string, XXX>,而不是-你真的需要所有的排序?
String.CompareOrdinal,或使用其重载String.Compare允许提供比较,并指定序数(区分大小写)比较,例如String.Compare(x, y, StringComparison.Ordinal)将是最快的.
基本上,有序比较只需逐个字符地走两个字符串,直到找到差异为止.如果没有发现任何差异,并且长度相同,则结果为0.如果没有发现任何差异但长度不同,则较长的字符串被视为"较大".如果确实找到了差异,它可以立即解决,根据顺序术语中哪个字符"更大",这被认为是"更大".
放置是另一种方式:它就像在两个char[]值之间进行明显的比较.
文化敏感的比较必须根据您使用的精确文化执行各种曲折的壮举.有关此示例,请参阅此问题.很明显,遵循更复杂的规则会使速度变慢.
Pet*_*son 11
我刚刚注意到我自己的代码性能提高了50%,首先比较字符串长度,如果相等,那么使用string.compare方法.所以在循环中我有:
VB:
If strA.length = strB.length then
if string.compare(strA,strB,true) = 0 then
TheyAreEqual
End if
End if
Run Code Online (Sandbox Code Playgroud)
C#:
if(strA.Length == strB.Length)
{
if(string.Compare(strA,strB,true) == 0)
{
//they are equal
}
}
Run Code Online (Sandbox Code Playgroud)
这可能取决于你自己的字符串,但它似乎对我有用.
最快的是带有引用相等性测试的实习字符串,但是您只能进行相等性测试,并且会消耗大量内存 - 如此昂贵,以至于几乎从来都不是推荐的课程。
除此之外,区分大小写的序数测试将是最快的,对于非区域性特定的字符串绝对推荐使用此方法。如果适用于您的用例,区分大小写会更快。
当您指定 或
StringComparison.Ordinal时StringComparison.OrdinalIgnoreCase,字符串比较将是非语言的。也就是说,在做出比较决策时,会忽略自然语言特有的特征。这意味着决策基于简单的字节比较,并忽略按区域性参数化的大小写或等价表。因此,通过显式地将参数设置为 或StringComparison.Ordinal,StringComparison.OrdinalIgnoreCase您的代码通常会提高速度、提高正确性并变得更加可靠。
| 归档时间: |
|
| 查看次数: |
27125 次 |
| 最近记录: |