访问匹配值的最有效方法是什么?

时间:2013-05-03 17:13:13

标签: c# regex match

有很多方法可以在C#中访问Match的值:

Match mtch = //whatever
//you could do
mtch.Value
//or 
mtch.ToString()
//or
mtch.Groups[0].Value
//or 
mtch.Groups[0].ToString()

我的问题是:访问它的最佳方式是什么?

(我知道这是微优化,我只是想知道)

3 个答案:

答案 0 :(得分:2)

我写了一个快速测试,结果得到了以下结果......

    [TestMethod]
    public void GenericTest()
    {
        Regex r = new Regex(".def.");
        Match mtch = r.Match("abcdefghijklmnopqrstuvwxyz", 0);
        for (int i = 0; i < 1000000; i++)
        {
            string a = mtch.Value;                  // 15.4%
            string b = mtch.ToString();             // 19.2%
            string c = mtch.Groups[0].Value;        // 23.1%
            string d = mtch.Groups[0].ToString();   // 38.5%
        }
    }

答案 1 :(得分:0)

  1. 写一个测试
  2. 阅读结果
  3. 考虑结果
  4. 如果您不想编写测试,请查看Microsoft中间语言(MSIL)并考虑将花费更多时间的内容


    我也用结果测试了它

                // VS 2012 Ultimate
                // 
                Regex r = new Regex(".def.");
                Match mtch = r.Match("abcdefghijklmnopqrstuvwxyz", 0);
                string a, b, c, d;
                for (int i = 0; i < int.MaxValue; i++)
                {
                   a = mtch.Value;                  // 1.4%
                   b = mtch.ToString();             // 33.2%
                   c = mtch.Groups[0].Value;        // 15.3%
                   d = mtch.Groups[0].ToString();   // 44.1%
                }
    

答案 2 :(得分:0)

如果你在谈论基于你提供的样本的效率,我猜你最有效的是第一个,因为当你使用ToSting()时,它会为你的变量添加一个额外的转换功能,这需要额外的时间,