tryParse, try/catch(Parse), Convert比较

只是一个别人写的文章精简一下,原文在这里:http://blogs.msdn.com/ianhu/archive/2005/12/19/505702.aspx

话不多,直接上代码:

 

代码
private List<Int32> TestParse(String[] strings)

{

Int32 intValue;

List
<Int32> intList = new List<int>();

 

for (int i = 0; i < 5000000; i++)

{

intList.Clear();

 

foreach (String str in strings)

{

try

{

intValue 
= Int32.Parse(str);

intList.Add(intValue);

}

 

catch (System.ArgumentException)

                     { }

 

                     
catch (System.FormatException)

                     { }

 

                     
catch (System.OverflowException)

             { }

}

 

}

 

return intList;

}

 

private List<Int32> TestTryParse(String[] strings)

{

Int32 intValue;

List
<Int32> intList = new List<int>();

Boolean ret;

 

for (int i = 0; i < 5000000; i++)

{

intList.Clear();

 

foreach (String str in strings)

                     {

                           ret 
= Int32.TryParse(str, out intValue);

                     
if (ret)

                     {

                                  intList.Add(intValue);

                     }

             }

       }

 

       
return intList;

}

 

private List<Int32> TestConvert(String[] strings)

{

Int32 intValue;

List
<Int32> intList = new List<int>();

 

for (int i = 0; i < 5000000; i++)

{

intList.Clear();

 

foreach (String str in strings)

{

try

{

intValue 
= Convert.ToInt32(str);

intList.Add(intValue);

}

 

catch (System.FormatException)

{ }

 

catch (System.OverflowException)

{ }

}

}

 

return intList;

}

 

测试正确数据:

{ "123", "4567", "7890", "1", "1231280", "10" }.

 

三者性能差不多。

 

测试错误数据:

{ "12345", null, "123", "1324dfs", "51235", String.Empty, "43", "4123412341234123412341234123412341234123" }.

 

如图所见:tryParse>Convert>Parse

原因在于Convert跟Parse要进行异常处理,尤其是Parse的ArgumentNullException处理开销很大。

 

总结:

在没特殊需求的情况下强烈建议使用tryParse

posted @ 2010-01-31 13:41  Kira基拉  阅读(733)  评论(1编辑  收藏  举报