泛泛地说说托管代码的运行效率问题
来源:互联网 发布:linux awk 时间函数 编辑:程序博客网 时间:2024/04/30 19:44
问题是快多少。
而具体快多少也不应该泛泛而谈,应该是什么类型的操作中快百分之多少,以及细分为冷启动、热启动、运行中、多次运行均值、峰值、资源受限的一些特殊情况,分这些情况下分别向此地测试、分析、说明。
Microsoft 提供的资料宣称 .NET 大约是 C/C++ 执行效率的 90%。XNA 则提供资料宣称 Managed DirectX 效率可以达到 Native DirectX 的 98%。
而具某非官方的测试,在一般的应用中C#的性能能达到C++的70%-80%。
作为托管代码来说这个成绩已经很不错了。
I/O操作方面C#应该不输于C++。
数值计算方面肯定是C > C++ > C#
操作内存当然也是C/C++ > C#
可能会令很多人吃惊的是,如果不做特别的优化,文件操作C#也许会比C/C++快。
我对这个结果相当满意,不知诸位满意否。
如果开发实时性系统,托管代码(.Net/Java)确实是存在软肋的,但非实时性系统且资源不严格受限的大多数情况下,托管代码已经很令人可以接受了。
注意在这里有三个前提:
- 非实时
- 资源不严格受限
- 一般情况下
更何况系统的性能还可以通过更好的系统架构、更合理的流程设计、更优的算法来进一步提升,这些方面的提升可能不止20%、30%了,成倍增长也不是没可能。
- 大多数程序员写的大多数C#,更容易比大多数程序员写的大多数C/C++程序快;
- 大多数程序员写的大多数C/C++程序,比大多数程序员写的大多数C#程序更容易崩溃。
动脑筋想想这是为什么吧。
计算机编程语言发展的历史中,最先出现的是最低级的编程语言,然后不断出现越来越高级的编程语言。这里头的因素,计算设备越来越廉价、越来越强大只是众多原因之一,还有很多其他方面的原因,比如软件工程方面的原因、人们对IT服务的需求的井喷式增长,这些也都是极其重要的原因。而计算机编程语言的发展是在这众多的原因中寻求一个平衡点,这个平衡点甚至不能针对所有领域都做到平衡,只能针对某些特定领域达到平衡。
这个道理大家都想得明白。
但是具体到某种特定的编程语言,某些人就想不明白了,开始犯轴了。有点好笑呀。
详细的测评文章,大家可能都多少看过一些吧,这些文章,由于测试方法、测试环境大相径庭,所以结论也不未必一致,但是看这类文章不是简单地看一个结论就完了,要看它的测试方法、测试的场景,从中得到一些对自己确实有用的信息。
参考文献:
- Benchmark start-up and system performance for .Net, Mono, Java, C++ and their respective UIhttp://www.codeproject.com/Articles/92812/Benchmark-start-up-and-system-performance-for-Net
- [Mono-list] Mono C# versus Java 6 -server performance http://lists.ximian.com/pipermail/mono-list/2007-November/037091.html
- C#, C++, Java性能对比 http://www.cppblog.com/Chipset/archive/2009/03/01/75266.html
- 应用程序的性能: C# vs C/C++ http://www.cnblogs.com/skyivben/archive/2008/07/02/1234335.html
- 详细评测C#与C/C++的性能对比,看下谁更强? http://www.xueit.com/cshare/show-7142-1.aspx
- C# vs C/C++ Performance http://www.codeproject.com/Articles/24045/C-vs-C-C-Performance
- Stream I/O Performance http://www.cnblogs.com/slime/archive/2009/11/11/1600601.html
- Improving .NET Application Performance and Scalability http://msdn.microsoft.com/zh-cn/library/ff649152.aspx
- .NET Performance Testing and Optimization - The Complete Guide http://book.douban.com/subject/4912580/
- 泛泛地说说托管代码的运行效率问题
- 托管代码和非托管代码效率的对比问题
- 浅谈代码提高运行效率的问题
- 托管代码和非托管代码效率的对比。
- 托管代码和非托管代码效率的对比
- 提高代码的运行效率
- Android的运行效率问题
- 提高代码的的运行效率
- 检测代码运行效率 GetTickCount()的使用
- 检测代码运行效率 GetTickCount()的使用
- 提高代码的运行效率(1)
- 提高代码的运行效率(2)
- 提高代码的运行效率 (3)
- 提高代码的运行效率 (4)
- 提高代码的运行效率(1)
- 提高代码的运行效率(2)
- 提高代码的运行效率 (3)
- 提高代码的运行效率 (4)
- ios5新特性:自动引用计数(ARC)详解
- Ubuntu 11上面安装Sun JDK 1.6
- Ubuntu上的小工具软件
- hunnu 11127 gaussing game 差分约束
- Ruby on Rails中文处理
- 泛泛地说说托管代码的运行效率问题
- Lucene代码备份之分页条件查询
- POJ 1861
- VNC Viewer : Error "unable to connect to hotst: Connection refused (10061)"
- 字符串转换为日期型
- oracle动态sql语句处理——47522341的专栏在去dba的路上
- 编写自己的日志输出文件
- Properties文件使用
- Oracle - 怎样使用B树索引和位图索引