处理和转换中哪一个更快int.Parse(),int.TryParse(),Convert.Int32()
哪一个更快,更强大,更可靠。 为什么?
int.Parse() int.TryParse() Convert.ToInt32()
请阅读此内容 (“性能分析Parse与TryParse与ConvertTo相比”)以获取更多信息。
如果您不确定该字符串是否可解析,则int.TryParse()
将比其他任何一个更快并捕获exception。
Convert.Int32()
调用Int32.Parse()
并额外检查null, 因此 这就是为什么Int32.Parse()
可能会更快一些。Convert.Int32()
会更快(它在Int32.Parse()
必须处理之前捕获null)。
Int32.Parse()
内部调用Number.ParseInt32()
,当无法解析数字时抛出exception。
Int32.TryParse()
内部调用Int32.TryParse()
,它具有与Number.ParseInt32()
类似的代码,但不是抛出exception,而是简单地返回false …这会引入更少的开销。
考虑到所有这些变量,我的猜测是Int32.TryParse()
将为非空值提供最快的结果。 如果大多数调用都有可能包含空值,我会说Convert.Int32()
会表现得更好。
……所有这些都是通过.NET Reflector的强大function带给您的。
int.Parse
和Convert.Int32
内部调用int.TryParse
,因此它们之间的性能差异应该是微不足道的。 TryParse
是最通用的,因为它允许您决定是否抛出exception,但是这些方法之间没有区别。
Convert.ToInt32(string)调用Int32.Parse(string)。
但是,如果使用Int32.Parse(或等效的int.Parse),则可以指定解析时使用的全球化和格式。
Int.Parse会更快,因为它不会执行try / catch。
Int.TryParse更可靠,如果您不传递不可转换的值,则不会抛出错误。
我个人用
int.Parse(...)
如果我有一个字符串作为源和
Convert.ToInt32(...)
如果我有一个valueType(double,decimal)作为源,因为否则我必须将它强制转换为字符串并处理本地文化。
我发现答案取决于背景。
如果我将(例如) DataRow
转换为对象,我将有很多Convert.ToXXX
调用,因此我将使用Convert.ToInt32
因为这与该转换的其他语句一致。
在其他情况下,如果我想在字符串不解析时抛出exception(快速失败),我将使用int.Parse
,因为它会为我抛出exception,并且int.TryParse
倾向于生成更丑陋的代码(I’从来没有成为参数的粉丝)
如果我只想在字符串不解析时指定一些默认值,我将使用int.TryParse
,因为否则,我将不得不自己处理exception,这既昂贵又丑陋。
但是,除非你数十亿次调用解析站点,否则我会惊讶地发现这三种格式之间存在明显的时间差异,因此我更倾向于使用更易读的代码,而不是更快的变体。