炼丹炉中的孙悟空

Only For Study
posts(33) comments(200) trackbacks(3)
  • 博客园
  • 联系
  • 订阅 订阅
  • 管理

与我联系

  • 发短消息

搜索

 

常用链接

  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

我参与的团队

  • asp.net开发团队(0/0)

我的标签

  • js 全选 不选(1)
  • cookie 中文 丢失 乱码(1)
  • 静态页 模板引擎 (1)
  • 上海搭车网 做网站(1)
  • 域名注册 域名选择(1)
  • 分页存储过程(1)

随笔分类(42)

  • Ajax(2)
  • ASP.NET(17)
  • C#(6)
  • DIV+CSS(2)
  • Framework(4)
  • HTTP 协议(4)
  • MSIL&CLR(3)
  • SQL(2)
  • W3C(2)

随笔档案(33)

  • 2009年6月 (3)
  • 2009年5月 (2)
  • 2009年4月 (2)
  • 2009年3月 (1)
  • 2008年12月 (1)
  • 2008年11月 (1)
  • 2008年9月 (1)
  • 2008年6月 (1)
  • 2008年5月 (1)
  • 2008年4月 (20)

文章分类

  • MBA

最新随笔

  • 1. 管理学常用英语词汇
  • 2. 实用金融英语词汇
  • 3. 英语口译经济词汇
  • 4. 经济危机下站长的唯一出路:精品站
  • 5. 也谈分页存储过程的问题,堪称史上最强分页存储过程!
  • 6. 投资域名还有机会吗?一个老米农的答案!
  • 7. 我的几个网站最新的pr值
  • 8. 深刻剖析建站域名选择和域名投资
  • 9. test data
  • 10. 做网站就是做服务、做趋势、做未来!

积分与排名

  • 积分 - 15346
  • 排名 - 3430

最新评论

  • 1. re: 经济危机下站长的唯一出路:精品站
  • 域名不错 不过做分类信息的现在太多了吧
  • --隨風.NET
  • 2. re: 经济危机下站长的唯一出路:精品站
  • @xiaotie
    你访问的时间正好是服务器维护
  • --shenghuo.cn
  • 3. re: 也谈分页存储过程的问题,堪称史上最强分页存储过程!
  • @Jeffrey Zhao
    老赵什么时候出个类似于petshop的小例子吧,具体讲讲怎么把mvc的思想用在webform项目里面。
  • --thxis0
  • 4. re: 经济危机下站长的唯一出路:精品站
  • 域名不错 网站打不开
  • --xiaotie
  • 5. re: 也谈分页存储过程的问题,堪称史上最强分页存储过程!
  • 没什么特别啊。敢叫史上最强。
    楼主是标题党
  • --zahota

阅读排行榜

  • 1. 要命的键盘与鼠标(2579)
  • 2. 细说Convert和Parse到底那个效率高!(2452)
  • 3. asp.net2.0自动根据用户自定义字数生成带分页的静态(HTML)页(2263)
  • 4. 也谈分页存储过程的问题,堪称史上最强分页存储过程!(2177)
  • 5. 使用Ajax实现购物车(一)(287)

评论排行榜

  • 1. 也谈分页存储过程的问题,堪称史上最强分页存储过程!(60)
  • 2. 要命的键盘与鼠标(57)
  • 3. asp.net2.0自动根据用户自定义字数生成带分页的静态(HTML)页(45)
  • 4. 细说Convert和Parse到底那个效率高!(20)
  • 5. c#字符串打乱顺序,用于生成文章!(5)

60天内阅读排行

  • 1. 也谈分页存储过程的问题,堪称史上最强分页存储过程!(2177)
  • 2. 经济危机下站长的唯一出路:精品站(64)
  • 3. 管理学常用英语词汇 (14)
  • 4. 实用金融英语词汇(12)
  • 5. 英语口译经济词汇(12)

View Post

细说Convert和Parse到底那个效率高!

前言:
    好多高手,献丑了。
    大家都知道在进行类型转换的时候有连个方法供我们使用就是Convert.to和*.Parse,但是疑问就是什么时候用C 什么时候用P
     通俗的解释大家都知道:
     Convert 用来转换继承自object类型的类型(当然所有的类型都是继承自object的),但是一般Convert用来转化直接就是obejct的类型,如我们用datareader从数据库取出一个数据的时候就是object类型的,此时你若用int.parse(dr["id"]);肯定会报错的,所以必须使用Convert.toint32(dr["id"]);
     而Parse用来转换String类型的数据。
      其实我们看System这个基类就会发现,他的Convert类提供了几乎所有N型到N型的转化,就是Convert也只是string类型到int型的转化,只是parse没有提供针对object的转化罢了,可以说parse是N型(除了string类型,他不提供parse的转化,仅支持Convert到其他类型的转化)。都有的一个方法,而Convert提供了泛义上的转化。
      疑问来了,既然Convert提供了泛义的转化比如 string str="1234"; int32.parse(str);Convert.toint32(str);都可以达到相同的效果。哪么到底我们该用那一个,而那一个效果又会更好!
      来看system这个基类:
       以int到string类型的转换,不带格式的转换为例,当我们使用int32.parse(str)的时候,他其实是在调用mscorlib基类库的system类中的构造类型int32中的Parse方法。而这个方法调用了本构造中的一个重载(Overload)方法Parse。
       

public static int Parse(string s)
{
    
return Parse(s, NumberStyles.Integer, null);
}


 

 
 而重载的parse中采取调用system中只读函数Nunber
public static int Parse(string s, NumberStyles style, IFormatProvider provider)
{
    NumberFormatInfo instance 
= NumberFormatInfo.GetInstance(provider);
    NumberFormatInfo.ValidateParseStyle(style);
    
return Number.ParseInt32(s, style, instance);
}


 

 

Nubmer中的PasreInt32会去执行转换。
      好,int的分析到此。看Convert的转换,
    当我们调用Convert.toint32这个方法的时候看看Convert类是怎么执行的!
public static int ToInt32(string value, IFormatProvider provider)
{
    
if (value == null)
    
{
        
return 0;
    }

    
return int.Parse(value, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
}


 

 
 
    你会发现他直接就去找了int这个类的Parse方法。而这个方法直接去执行了int32中parse的那个重载的方法。可见殊途同归他们最后到要落到只读类Number身上去进行类型转换。性能差距在进行到Number之前就产生了!在parse中他会直接找到自身,而Convert转化string到什么类型最终都是落到该类型的parse身上,所以针对string类型的转换还是本身类型的parse效率更高一些。
   
    

Jake

http://www.shenghuo.cn

转载注明出处!

posted on 2008-04-23 11:36 Jake.SHI 阅读(2452) 评论(20)  编辑 收藏 网摘 所属分类: ASP.NETC#Framework

View Comments

#1楼   回复  引用  查看    
好,学习了!http://www.cnblogs.com/Emoticons/qface/055242240.gif" alt="" />
2008-04-23 11:46 | Lucky Jack      
#2楼   回复  引用    
学习了,以前还真没注意过这个细节
2008-04-23 11:47 | ASP.NET CMS[未注册用户]
#3楼   回复  引用  查看    
应该是不相伯仲吧?
2008-04-23 11:51 | jillzhang      
#4楼   回复  引用  查看    
重要的是可读性,这点性能差别,是不是可以忽略?
2008-04-23 12:18 | 天下叁      
#5楼   回复  引用  查看    
经分析,感觉Convert更好
2008-04-23 12:26 | Clark Zheng      
#6楼   回复  引用  查看    
如果是转数字,感觉还是TryParse好用一些
2008-04-23 12:44 | 丁学      
#7楼   回复  引用  查看    
学习
2008-04-23 12:45 | 留恋星空      
#8楼   回复  引用  查看    
--引用--------------------------------------------------
ASP.NET CMS: 学习了,以前还真没注意过这个细节
--------------------------------------------------------
2008-04-23 12:48 | 鹏鹏_Lovely      
#9楼   回复  引用  查看    
Convert 中转换函数的存在,很大程度上是为了强制类型转换的需要,而不是供一般开发者进行调用。从语义来说,Integer.Parse 也是更通顺的。
2008-04-23 13:08 | 随风流月      
#10楼   回复  引用  查看    
--引用--------------------------------------------------
ASP.NET CMS: 学习了,以前还真没注意过这个细节
--------------------------------------------------------
2008-04-23 13:10 | charry      
#11楼   回复  引用  查看    
平时都用Convert,没注意到性能问题。赫赫,关于数字在不知道是否能成功情况下用tryp,
2008-04-23 14:12 | 镜涛      
#12楼   回复  引用    
看到这种标题不知道是高兴还是悲哀
2008-04-23 15:04 | A.Z![未注册用户]
#13楼[楼主]   回复  引用  查看    
@new 维生素C.net()
学习了!呵呵!
2008-04-23 15:24 | Jake.SHI      
#14楼   回复  引用  查看    
这个应该不是效率的问题

Convert 使用的机制是 IConvertible 接口

Parse是逆向转换回来。 应该说,有点不同
2008-04-23 19:49 | G yc {Son of VB.NET}      
#15楼[楼主]   回复  引用  查看    
对!Convert有的是实现IConvert这个接口的!有的不是!比如我讨论的就不是!
2008-04-23 21:01 | Jake.SHI      
#16楼   回复  引用    
看来不错....
2008-04-24 08:41 | 风风004[未注册用户]
#17楼   回复  引用  查看    
学习下。。
2008-04-29 13:56 | 水平线      
刷新评论 切换模板



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

验证码: 验证码 看不清,换一个

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1167050

导航:网站首页 社区 新闻 博问 闪存 网摘 招聘 找找看 Google搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

最新IT新闻:
19岁天才黑客发布首个iPhone 3GS破解软件
新浪邮箱大本营粉墨登场!Sina.cn开放注册
IE市场份额首次跌破60%
Google App Engine宕机6小时——云的安全在哪里?
微软新推社交网站Windows Live Planet

相关链接:
 
Powered by:
博客园
Copyright © Jake.SHI