悬赏分:5 浏览:512 次
Convert.ToInt32(dr["NewsId"]);
int.Parse(dr["NewsId"].ToString());
以上两种转换方法哪种性能更好些呢?
|
第二个好一点吧.
如果注重性能,并且这样的代码确实是性能瓶颈的话,可以不要使用"NewsId"这样的字符串作为索引器参数,而使用整数. 也可以这样: static readonly COL_NewsId=0; news.Id=dr[COL_NewsId],这样好读一点. 另外,其实int.Parse性能也比较差,不如自己写一个更快的转换方法. object o = "1234567"; DateTime start = DateTime.Now; for (int i = 0; i < 1000*1000; i++) { int k = Convert.ToInt32(o); } Console.WriteLine(((TimeSpan)(DateTime.Now - start)).TotalMilliseconds); DateTime start2 = DateTime.Now; for (int m = 0; m < 1000 * 1000; m++) { int n = int.Parse(o.ToString()); } Console.WriteLine(((TimeSpan)(DateTime.Now - start2)).TotalMilliseconds); 结果 : 328 296 从结果上看第二种略好,但俺觉得还是应该使用第一种写法. 因为ToString()会创建临时的String变量, 会增加GC开销. 我一般都用第一种,感觉性能差别不太大 不是性能关键部分,无所谓吧 用Reflector 查看源码: Convert类: public static int ToInt32(object value) { if (value != null) { return ((IConvertible) value).ToInt32(null); } return 0; } 参数为object时调用什么样的方法是要看该value实际类型的。 如果为string: String类: int IConvertible.ToInt32(IFormatProvider provider) { return Convert.ToInt32(this, provider); } Convert类: public static int ToInt32(string value, IFormatProvider provider) { if (value == null) { return 0; } return int.Parse(value, NumberStyles.Integer, provider); } 最后回到了调用int.Parse(...) 如果是其他类型并不完全不同。 这个性能差别就在几个函数的调用上。可以说几乎区别是非常小的。 如果真要最求这个性能,我推荐用int.TryParse(...)。这个方法不会抛出异常。 一个异常的抛出和捕获比几个函数的调用消耗可大多了。 同 壁虎 最好用tryparse:) 异常抛出的消耗更大 @沙加 ToInt32还有装箱带来的问题呢? 楼主可以自己写段代码测试一下,一般情况下还是第二种更好点。 |
|
6个月前 红尘中迷茫 : 谢谢大家关注。非常感谢 :) |