有谁知道为什么C#(.NET)的StartsWith函数比IsPrefix慢得多?
最佳答案
我认为这主要是在获取线程的当前文化。
如果您更改Marc的测试以使用这种形式的String.StartsWith
:
Stopwatch watch = Stopwatch.StartNew();
CultureInfo cc = CultureInfo.CurrentCulture;
for (int i = 0; i < LOOP; i++)
{
if (s1.StartsWith(s2, false, cc)) chk++;
}
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds + "ms; chk: " + chk);
离它更近了。
如果使用
s1.StartsWith(s2, StringComparison.Ordinal)
,则比使用CompareInfo.IsPrefix
快得多(当然,这取决于CompareInfo
)。在我的盒子上,结果是(并非科学地):显然这是因为它实际上只是比较每个点的16位整数,这非常便宜。如果您不希望进行文化敏感的检查,而性能对您尤为重要,那就是我要使用的重载。
关于.net - 为什么函数isprefix比C#中的Startswith更快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/717855/