尝试在String上查找单个字符的更快方法是什么?

时间:2010-05-27 09:50:03

标签: c# .net string

这段代码的速度更快/效率更高? :

Boolean contains = myString.IndexOf("~", StringComparision.InvariantCultureIgnoreCase)!=-1;

Boolean contains = myString.IndexOf('~')!=-1;

我认为第二个因为是单个字符,但使用不变文化忽略大小写比较器应该也很快:P

干杯。

6 个答案:

答案 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('~')