首页 新闻 会员 周边 捐助

关于对象转换性能问题

0
悬赏园豆:5 [已解决问题] 解决于 2007-12-30 16:03
<P>Convert.ToInt32(dr["NewsId"]);<BR>int.Parse(dr["NewsId"].ToString());</P> <P>以上两种转换方法哪种性能更好些呢?</P>
红尘中迷茫的主页 红尘中迷茫 | 初学一级 | 园豆:60
提问于:2007-12-29 23:09
< >
分享
最佳答案
1
dr.GetInt32(0)
PENGHAO-X | 初学一级 |园豆:20 | 2007-12-30 15:41
其他回答(6)
0
第二个好一点吧. 如果注重性能,并且这样的代码确实是性能瓶颈的话,可以不要使用"NewsId"这样的字符串作为索引器参数,而使用整数. 也可以这样: static readonly COL_NewsId=0; news.Id=dr[COL_NewsId],这样好读一点. 另外,其实int.Parse性能也比较差,不如自己写一个更快的转换方法.
deerchao | 园豆:8367 (大侠五级) | 2007-12-29 23:55
0
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开销.
沙加 | 园豆:3680 (老鸟四级) | 2007-12-30 00:00
0
我一般都用第一种,感觉性能差别不太大 不是性能关键部分,无所谓吧
JesseZhao | 园豆:305 (菜鸟二级) | 2007-12-30 09:24
0
用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(...)。这个方法不会抛出异常。 一个异常的抛出和捕获比几个函数的调用消耗可大多了。
壁虎 | 园豆:140 (初学一级) | 2007-12-30 10:33
0
同 壁虎 最好用tryparse:) 异常抛出的消耗更大
wingoo | 园豆:1513 (小虾三级) | 2007-12-30 11:19
0
@沙加 ToInt32还有装箱带来的问题呢? 楼主可以自己写段代码测试一下,一般情况下还是第二种更好点。
阿不 | 园豆:665 (小虾三级) | 2007-12-30 14:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册