【发布时间】:2010-10-27 11:06:52
【问题描述】:
我想知道什么更快。帮帮我。
我在方法中声明了一个变量,如下所示:
public static Regex FindNumber()
{ return new Regex(@"\d+", RegexOptions.IgnoreCase | RegexOptions.Compiled); }
如您所见,它返回一个正则表达式。
我还有另一种方法,看起来像这样:
private static string TestOne(string RawData)
{
Regex rgxFindNumber = FindNumber();
Regex rgxFindDays = FindDays();
for (int i = 0; i < mc.Count; i++)
{
int days = Convert.ToInt32(rgxFindNumber.Match(rgxFindDays.Match(mc[i].Value).Value).Value);
}
return RawData;
}
现在是 TestOne 方法更快还是 TestTwo 更快?
private static string TestTwo(string RawData)
{
for (int i = 0; i < mc.Count; i++)
{
int days = Convert.ToInt32(FindNumber().Match( FindDays().Match(mc[i].Value).Value).Value);
}
return RawData;
}
现在我很好奇,因为 TestOne 在我的代码中可能会被大量调用,所以我想知道什么会更好地实现。
谢谢大家。
**编辑:**我使用的代码有一个非常大的类。它是基于文本的策略游戏的文本解析器。我正在尝试对其进行一些重构,这就是我想知道的。如果我确实为 Regex 创建了一个私有变量,那么每次访问该类时不会运行它吗?这是我的问题。
【问题讨论】:
-
首先设定有意义的绩效目标。其次,根据这些目标衡量进展情况。第三,如果你还没有达到你的目标,使用分析器找出最慢的东西。第四,修复它。重复直到你达到你的目标。每一步都至关重要。回答您的问题的唯一方法是尝试并衡量结果以查看它是否有意义。坐在办公桌前阅读您的问题的任何人都不可能知道客户机器上的差异有多大,或者这种差异对您的客户是否有意义,或者这是否是您应该寻求优化的地方。