C#的性能到底有多差?
这篇文章带领大家来看看c#的性能问题。当然了,作为比较的选手是c/c++。
首先说说测试环境:
操作系统:win7 旗舰版
内存:2GB
硬盘:160GB
处理器:Intel Pentium Dual CPU T2330 @ 1.60GHZ
本文打算基于以下几个方面讨论:
1.CPU使用情况;
2.内存使用情况;
3.基本类型的四则运算能力;
4.数学函数运算能力;
5.I/O操作能力;
6.数组运算能力;
1.CPU使用情况
2.内存使用情况
3.基本类型的四则运算能力

1 double intArithmetic( ">int intMax)
2 {
3 double elapsedTime;
4 clock_t stopTime;
5 int intResult = 1 ;
6 int i = 1 ;
7
8 clock_t startTime = clock();
9 while (i < intMax)
10 {
11 intResult -= i ++ ;
12 intResult += i ++ ;
13 intResult *= i ++ ;
14 intResult /= i ++ ;
15 }
16 stopTime = clock();
17
18 elapsedTime = (stopTime - startTime) / (CLOCKS_PER_SEC / ( double ) 1000.0 );
19 printf( " Int arithmetic elapsed time: %1.0f ms with intMax of %ld\n " , elapsedTime, intMax);
20 printf( " i: %d\n " , i);
21 printf( " intResult: %d\n " , intResult);
22 return elapsedTime;
23 }

1 static long intArithmetic( int intMax)
2 {
3 long elapsedMilliseconds;
4 int intResult = 1 ;
5 int i = 0 ;
6
7 stopwatch.Start();
8 while (i < intMax)
9 {
10 intResult -= i ++ ;
11 intResult += i ++ ;
12 intResult *= i ++ ;
13 intResult /= i ++ ;
14 }
15 elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
16 stopwatch.Reset();
17
18 Console.WriteLine( " Int arithmetic elapsed time: " + elapsedMilliseconds +
19 " ms with max of " + intMax);
20 Console.WriteLine( " i: " + i);
21 Console.WriteLine( " intResult: " + intResult);
22 return elapsedMilliseconds;
23 }
对比结果见下图:
c/c++的:

1 double doubleArithmetic( double doubleMin, double doubleMax)
2 {
3 double elapsedTime;
4 clock_t stopTime;
5 clock_t startTime = clock();
6
7 double doubleResult = doubleMin;
8 double i = doubleMin;
9 while (i < doubleMax)
10 {
11 doubleResult -= i ++ ;
12 doubleResult += i ++ ;
13 doubleResult *= i ++ ;
14 doubleResult /= i ++ ;
15 }
16
17 stopTime = clock();
18 elapsedTime = (stopTime - startTime) / (CLOCKS_PER_SEC / ( double ) 1000.0 );
19 printf( " Double arithmetic elapsed time: %1.0f ms with doubleMin %.15f, doubleMax %.15f\n " , elapsedTime, doubleMin, doubleMax);
20 printf( " i: %f\n " , i);
21 printf( " doubleResult: %.15f\n " , doubleResult);
22 return elapsedTime;
23 }

对比结果见下图:
c/c++的:


对比结果见下图:
通过以上数据,发现两者对基本数据类型的操作性能差不多,属于同一个数量级。
同时,注意到,c#针对int型的性能要优于c/c++。
4.数学函数的运算能力
c/c++的:
c#的:

对比结果如下图:

5.I/O操作能力

c#的:

对比结果见下图:

6.数组运算能力


对比结果见下图:

7.异常处理能力

8.STL vs FCL



9.算法HeapSort

10.矩阵乘

11.嵌套for循环

12.字符串连接

13.总和对比

总结
History repeats...!
在一个真正的软件项目中我们要做到开发速度与运行速度的折中。另外,建议大家看一下《Framework Design Guidelines, Conventions,Idioms,and Patterns
for Reusable .NET Libraries》,这本书深刻阐述了.NET的设计过程,其认真程度(包括一个命名)令人折服。
参考
- http://www.tommti-systems.de/go.html?http://www.tommti-systems.de/main-Dateien/reviews/languages/benchmarks.html
- http://www.codeproject.com/KB/cs/CSharpVsCPP.aspx
- http://msdn.microsoft.com/en-us/library/ms173196(VS.80).aspx
- http://dotnet.sys-con.com/node/46342
- http://www.techgalaxy.net/Docs/Dev/5ways.htm
注:本文基本上基于参考1写成。有兴趣的读者点击这里下载源代码。
转自:<a href="http://www.cnblogs.com/zhaoxiaowei/archive/2010/06/26/1765428.html" target="-blank"/>