Какой из них быстрее в обработке и преобразовании int.Parse (), int.TryParse (), Convert.Int32 () - PullRequest
5 голосов
/ 27 мая 2010

Какой из них быстрее, мощнее и надежнее. А почему?

int.Parse()
int.TryParse()
Convert.ToInt32()

Ответы [ 6 ]

9 голосов
/ 27 мая 2010

Go прочитайте это ("Анализ профилирования производительности против TryParse против ConvertTo") для большей информации о добавлении.

Если вы не уверены, что строка может быть проанализирована, тогда int.TryParse() будет НАМНОГО быстрее, чем любой другой, и поймать исключения.

5 голосов
/ 27 мая 2010

Convert.Int32() вызывает Int32.Parse() с дополнительной проверкой на ноль, , поэтому Int32.Parse() может быть чуть быстрее. , поэтому Convert.Int32() будет быстрее (он ловит ноль до Int32.Parse() должен иметь дело с этим).

Int32.Parse() вызывает Number.ParseInt32() внутренне, что вызывает исключения, когда число не может быть проанализировано.

Int32.TryParse() вызывает Number.TryParseInt32() внутренне, который имеет код, подобный Number.ParseInt32(), но вместо того, чтобы выдавать исключения, он просто возвращает false ..., что приводит к меньшим накладным расходам.

Учитывая все эти переменные, я думаю, что Int32.TryParse() даст вам самые быстрые результаты для ненулевых значений. Если есть вероятность, что большинство вызовов могут содержать нули, я бы сказал, что Convert.Int32() будет работать лучше.

... все, что принесло вам сила .NET Reflector.

0 голосов
/ 27 мая 2010

Я считаю, что ответ зависит от контекста.

Если я преобразую (например) DataRow в объект, у меня будет много вызовов Convert.ToXXX, поэтому я бы использовал Convert.ToInt32, потому что это согласуется с другими утверждениями, связанными с этим преобразованием.

В других ситуациях, если я хочу вызвать исключение, когда строка не анализируется (без сбоев), я буду использовать int.Parse, потому что это вызывает исключение, а int.TryParse имеет тенденцию генерировать более уродливый код (Я никогда не был поклонником наших параметров)

И если я просто хочу указать какое-то значение по умолчанию, если строка не анализируется, я буду использовать int.TryParse, потому что в противном случае мне придется обрабатывать исключение самостоятельно, а это дорого и уродливо.

Однако, если вы не вызываете сайт синтаксического анализа миллиарды раз, я был бы удивлен, увидев заметную разницу во времени между любым из трех форматов, поэтому я бы предпочел более читаемый фрагмент кода, чем немного более быстрый вариант.

0 голосов
/ 27 мая 2010

Я лично использую

int.Parse(...)

, если у меня есть строка в качестве источника, и

Convert.ToInt32(...)

, если у меня есть valueType (double, decimal) в качестве источника, потому что в противном случае япришлось бросить его на струны и разобраться с местной культурой.

0 голосов
/ 27 мая 2010

Convert.ToInt32 (строка) вызывает Int32.Parse (строка).

Однако, если вы используете Int32.Parse (или эквивалентный int.Parse), вы можете указать глобализацию и форматирование, используемые при разборе.

Int.Parse будет быстрее, так как он не делает попытку / ловлю.

Int.TryParse более надежен и не выдаст ошибку, если вы не передадите ему неконвертируемое значение.

0 голосов
/ 27 мая 2010

Оба int.Parse и Convert.Int32 внутренне вызывают int.TryParse, поэтому различия в производительности между ними должны быть тривиальными. TryParse является наиболее универсальным в том смысле, что он позволяет вам решать, следует ли генерировать исключение, но в остальном нет разницы между этими методами.

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