现在的位置: 首页 > 综合 > 正文

关于语言的执行效率问题

2013年04月01日 ⁄ 综合 ⁄ 共 724字 ⁄ 字号 评论关闭

刚在论坛看到有人问C#和C++的效率问题。我觉得:

即使都是用托管代码,C++也比C#效率略高(如果写程序的人水平一样)
因为C++中有更多的优化余地,把更多自由性给了开发人员。另外还可以再举个例子,C#中值类型到引用类型之间的Box和UnBox都是系统自己帮你做的,所以开发人员很容易在这个地方丢失性能,而C++则不会 。

Int32 v = 5; Object o = v; v = 123;
Console.WriteLine(v + ", " + (Int32) o);

这2行再普通不过的代码中就隐藏了6次拆/装箱操作
换成Console.WriteLine(v + ", " + o);变成了3次,
再换成Console.WriteLine(v.ToString() + “, “ + o); 就不需要这种操作而大大提高性能。

问题是作为C#程序员除非你对底层很了解,你是看不出
Console.WriteLine(v + ", " + (Int32) o);
Console.WriteLine(v + ", " + o);
Console.WriteLine(v.ToString() + “, “ + o);
这3句功能完全一样的语句执行效率却可以相差好些倍的。也就是在C#中有更多让程序员丢失性能的陷阱。在C++中少得多,起码这个地方C++是绝对需要程序员自己来Box和UnBox的,你很清楚到底封了多少次。

每一种语言都有让程序员犯错的陷阱,在C#中这种陷阱一般是影响性能,在C++中一般是影响安全。所以仅从性能看C++还是要优势一点,哪怕在托管代码中。

不过很多时候由语言带来的性能影响并不严重,重要的是写程序的人,重要的是算法。都说VC效率高VB效率低,其实更多是因为VC程序员普遍基础要好于VB程序员而不是因为VC和VB语言本身的效率。

抱歉!评论已关闭.