Какой из них быстрее обрабатывает и конвертирует int.Parse(), int.TryParse(), Convert.Int32()

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

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

Ответ 1

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

Если вы не уверены в том, что строка является синтаксической, то int.TryParse() будет намного быстрее, чем любая из других, и перехватывает исключения.

Ответ 2

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

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

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

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

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

Ответ 3

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

int.Parse(...)

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

Convert.ToInt32(...)

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

Ответ 4

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

Ответ 5

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

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

Int.Parse будет быстрее, поскольку он не выполняет попытку /catch.

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

Ответ 6

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

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

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

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

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