这段代码的速度更快/效率更高? :
Boolean contains = myString.IndexOf("~", StringComparision.InvariantCultureIgnoreCase)!=-1;
或
Boolean contains = myString.IndexOf('~')!=-1;
我认为第二个因为是单个字符,但使用不变文化忽略大小写比较器应该也很快:P
干杯。
答案 0 :(得分:3)
不变文化比其他文化更快,但顺序比较甚至更快。对于这些设置来说,使其具有实例性。因此,最快的字符串比较设置是StringComparison.Ordinal
。
搜索字符的速度大约是最快字符串搜索速度的两倍。
答案 1 :(得分:2)
第二个更快。在我的机器上,第一个需要大约340ms,第二个需要34ms。所以10次。
有趣的是,使用InvariantCulture而不是InvariantCultureIgnoreCase更快,而且Guffa指出Oridinal仍然更快。但不如IndexOf(char)快。
static void Main(string[] args)
{
string myString = "qwertyuipasdfghjklzxcvbnm,.~";
var s = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
{
Boolean contains = myString.IndexOf("~", StringComparison.InvariantCultureIgnoreCase) != -1;
}
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds);
var s2 = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
{
Boolean contains = myString.IndexOf('~') != -1;
}
s2.Stop();
Console.WriteLine(s2.ElapsedMilliseconds);
Console.ReadLine();
}
答案 2 :(得分:2)
两个片段不相同,请使用正确的两者。如果您有性能问题资料。
答案 3 :(得分:1)
编写自己的microbenchmark。计算每次运行100000次的时间。这应该给你答案。
答案 4 :(得分:1)
你也可以看看这里 Optimizing string operations in C#,也许这也会给你 关于如何优化它的一些想法 满足您的需求。
答案 5 :(得分:1)
对于它的价值,IndexOf(char)
重载会明显加快,但你可能不会注意到,除非你做了数万到数百万的这些比较。
您应该使用最适合您实际尝试的过载。
如果您需要文化感知和/或不区分大小写的比较,请使用相应的IndexOf
重载和StringComparison
选项。在这种情况下,您只是在搜索~
字符时,最简单的方法是使用IndexOf('~')
。