日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

64位/32位 C++/C# 数学计算性能对比测试

發布時間:2025/3/15 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 64位/32位 C++/C# 数学计算性能对比测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在下面的網址看到了使用MS的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc 幾個不同編譯器編譯的C/C++ 程序性能對比,結論是Intel的編譯器性能最高。

http://www.zxbc.cn/html/20081119/67961.html

?

同樣把這段Intel的SDK中的代碼遷移到C#中比較一下

我的筆記本是:Intel Core4 P8700 2.53G的CPU, 4G內存,Win7 64bit系統,VS2010自帶的編譯器

?

對于代碼略作調整和注釋

C++代碼

//intel的性能測試例子 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> //為cin cout 提供 #include <iostream> using namespace std;#define INTEG_FUNC(x) fabs(sin(x)) //計算公式double dclock(void); int main(void) { unsigned int i, j, N; double step, x_i, sum; double start, finish, duration, clock_t; double interval_begin = 0.0; double interval_end = 2.0 * 3.141592653589793238; start = clock(); //初始時間printf(" \n"); printf(" Number of中文 | Computed Integral | \n"); //Win7下中文顯示正常printf(" Interior Points | | \n"); for (j=2;j<27;j++) { N = 1 << j;step = (interval_end - interval_begin) / N; sum = INTEG_FUNC(interval_begin) * step / 2.0; for (i=1;i<N;i++) { x_i = i * step; sum += INTEG_FUNC(x_i) * step; } sum += INTEG_FUNC(interval_end) * step / 2.0; //printf(" %10d | %14e | \n", N, sum); printf(" %14e \n", sum); } finish = clock(); //結束時間duration = (finish - start); printf(" \n"); printf(" Application Clocks = %10e \n", duration); printf(" \n"); int tempA;cin>>tempA;return 0; }

?

?

默認編譯參數,都是Release編譯后,拿出exe文件獨立運行

32bit C++???? 6338ms

?

C# 代碼

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 {class Program{static void Main(string[] args){int time = System.Environment.TickCount; //添加計時器#regionint i, j, N;double step, x_i, sum;double start, finish, duration, clock_t;double interval_begin = 0.0;double interval_end = 2.0 * 3.141592653589793238;for (j = 2; j < 27; j++){N = 1 << j; step = (interval_end - interval_begin) / N;sum = Math.Abs(Math.Sin(interval_begin)) * step / 2.0;for (i = 1; i < N; i++){x_i = i * step;sum += Math.Abs(Math.Sin(x_i)) * step;}sum += Math.Abs(Math.Sin(interval_end)) * step / 2.0;Console.Write(sum.ToString()+"\r\n");}Console.Write((System.Environment.TickCount - time).ToString());Console.ReadLine();#endregion}} }

?

32bit C#? 命令行?? 5382ms

32bit C#? WinForm? 5351ms

?

都是重復測試了5次,最大最小誤差少于30ms

?

從左到依次為:32bit C++、 32bit C#命令行、 32bit C#WinForm?

?

C#的竟然比C++快了1秒。

?

再看看64bit的,64bit C++ 3696ms, 64bit C#? 5382 ms

從左到右依次為:

64bit C++, 32bitC++, 64bit C#

?

可見該程序64bit 編譯時,C++的性能大幅提升,C#的幾乎不變。

兩個計算精度應該相同,C++是因為輸出的格式科學計數法隱藏了后面的小數

?

結論:

1. C# 在WinForm和命令行中,數學計算性能相當

2. 32bit下C#的性能還不錯,若能在64bit下編譯器也能充分優化達到C++那樣的提升就好了。

?

?

楊韜的學習備忘錄 YTYT2002YTYT

http://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html

轉載于:https://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html

總結

以上是生活随笔為你收集整理的64位/32位 C++/C# 数学计算性能对比测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。