处理和转换中哪一个更快int.Parse(),int.TryParse(),Convert.Int32()

时间:2010-05-27 15:40:36

标签: c# .net

哪一个更快,更强大,更可靠。为什么?

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

6 个答案:

答案 0 :(得分:9)

Go read this(“Performance Profiling Parse vs. TryParse vs. ConvertTo”)获取更多信息。

如果您不确定该字符串是否可解析,那么int.TryParse()将比其他任何一个更快并且捕获异常。

答案 1 :(得分:5)

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的力量带给你的。

答案 2 :(得分:0)

int.ParseConvert.Int32内部都会调用int.TryParse,因此它们之间的性能差异应该是微不足道的。 TryParse是最通用的,它允许您决定是否抛出异常,但这些方法之间没有区别。

答案 3 :(得分:0)

Convert.ToInt32(string)调用Int32.Parse(string)。

但是,如果使用Int32.Parse(或等效的int.Parse),则可以指定解析时使用的全球化和格式。

Int.Parse会更快,因为它不会执行try / catch。

Int.TryParse更可靠,如果你没有传递一个不可兑换的值,就不会抛出错误。

答案 4 :(得分:0)

我个人使用

int.Parse(...)

如果我有一个字符串作为源和

Convert.ToInt32(...)

如果我有一个valueType(double,decimal)作为源,因为否则我必须将它强制转换为字符串并处理本地文化。

答案 5 :(得分:0)

我发现答案取决于具体情况。

如果我正在将DataRow转换为对象,我会进行大量Convert.ToXXX次调用,因此我会使用Convert.ToInt32,因为这与关于转换的其他陈述。

在其他情况下,如果我想在字符串不解析时抛出异常(快速失败),我将使用int.Parse,因为这会引发异常,int.TryParse趋于生成更丑陋的代码(我从未成为参数的粉丝)

如果我只是想在字符串不解析时指定一些默认值,我将使用int.TryParse,否则,我将不得不自己处理异常,这既昂贵又丑陋

然而,除非你数十亿次调用解析网站,否则我会惊讶地发现这三种格式之间存在明显的时间差异,所以我宁愿选择更易读的代码片段。