Я пишу высокопроизводительный синтаксический анализатор, и мне кажется, что Int32.Parse
может быть слишком медленным. Я написал простую версию, которая предполагает правильный ввод, и она работает намного лучше. Так я должен создать свою собственную версию вместо этого? Или уже есть другой, более быстрый метод?
Мой метод такой:
// parse simple int, assuming relatively correct input (i.e. all digits)
public static int ParseInt32Simply(string str) {
if (str == null) throw new ArgumentNullException("str");
if (str.Length == 0) throw new ArgumentException("str is empty");
int sign = 1, index = 0;
if (str[0] == '-') { sign = -1; index = 1; }
else if (str[0] == '+') { index = 1; }
int result = 0;
for (; index < str.Length; ++index) {
result = 10 * result + (str[index] - '0');
}
if (result < 0) throw new OverflowException(str + " is too large for Int32");
return result * sign;
}
Мои результаты сильно отличаются от встроенного эквивалента:
Int32.Parse took 8.2775453 seconds
ParseInt32Simply took 0.6511523 seconds
Int32.Parse took 6.7625807 seconds
ParseInt32Simply took 0.4677390 seconds
(Выполнение 25 миллионов итераций на моей машине; P4 3 ГГц с VS 2008 SP1)
Так, я должен использовать свою версию? Или есть другой метод, который я могу использовать?