可重用和效率

时间:2011-09-12 11:37:03

标签: c# performance variables

我正在解析一个文本文件,而我正在做的很多事情都涉及到代码:

int jobTypeStart = contents.IndexOf("JobType: ");
int jobTypeEnd = contents.IndexOf("\r\n", jobtypeStart);
string jobType = contents.Substring(jobtypeStart, 
    (jobTypeEnd - jobTypeStart )).Replace("JobType: ","");

这个相同的基本模式每个文件重复30次,数百或数千个文件在foreach循环中。每次声明一个新变量,或者重用那些int变量并只改变我正在寻找的IndexOf是否更有效?因此,为了清楚起见,我的下一段代码应该是:

int userNameStart = contents.IndexOf("UserName: ");
int userNameEnd = contents.IndexOf("\r\n", userNameStart);
string userName= contents.Substring(userNameStart, 
    (userNameEnd - userNameStart)).Replace("UserName: ","");

或者整个事情应该更像:

int stringStart = contents.IndexOf("JobType: ");
int stringEnd = contents.IndexOf("\r\n", stringStart);
string jobType = contents.Substring(stringStart , 
    (stringEnd  - stringStart)).Replace("JobType: ","");

stringStart = contents.IndexOf("UserName: ");
stringEnd = contents.IndexOf("\r\n", stringStart);
string userName= contents.Substring(stringStart , 
    (stringEnd  - stringStart)).Replace("UserName: ","");

或者我过度复杂的事情真的无关紧要?

干杯。

4 个答案:

答案 0 :(得分:3)

你应该把它重构成一个方法:

private string Extract(string text, string field)
{
    int stringStart = text.IndexOf(field);
    int stringEnd = text.IndexOf("\r\n", stringStart);
    return text.Substring(stringStart , (stringEnd  - stringStart)).Replace(field,"");
}

并将其称为

string userName = Extract(contents, "UserName :");

在这种情况下,我赞成可读性。

答案 1 :(得分:1)

你最初的方式很好。 int和string是声明中的值类型,据我所知,每次进行另一次循环迭代时,它都会从堆中拉出来。

答案 2 :(得分:0)

查看代码,我可以看到一个模式。为什么不将所有变量(JobType,UserName ...)放入列表中并对其进行迭代以获取字符串。

答案 3 :(得分:0)

也许一种做这些事情的方法会有所帮助吗?

 private string DoStuff(string contents, string matchString)
 {
     int stringStart = contents.IndexOf(matchString + ": ");
     int stringEnd = contents.IndexOf("\r\n", stringStart);
     return contents.Substring(stringStart, (stringEnd - stringStart)).Replace(matchString + ": ", "");
 }

然后每次都打电话:

string jobType = DoStuff(contents, "JobType");
string userName = DoStuff(contents, "UserName");