Переменное повторное использование и эффективность - PullRequest
0 голосов
/ 12 сентября 2011

Я анализирую текстовый файл, и многое из того, что я делаю, включает в себя такой код:

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 ]

3 голосов
/ 12 сентября 2011

Вы должны преобразовать это в метод:

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 голос
/ 12 сентября 2011

Ваш начальный путь в порядке. int и string являются типами значений в вашем объявлении, которые, насколько я знаю, извлекаются из кучи каждый раз, когда вы идете на другую итерацию цикла.

0 голосов
/ 12 сентября 2011

Возможно, метод, который делает это, поможет?

 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");
0 голосов
/ 12 сентября 2011

Глядя на ваш код, я вижу шаблон.Почему бы вам не поместить все свои переменные (JobType, UserName ...) в список и перебрать их для строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...