据说.NetCore效率很高?性能简单测试

来源:互联网 发布:淘宝跑腿办事 编辑:程序博客网 时间:2024/06/09 00:01

据说.NetCore效率很高?性能简单测试

本测试只测试了三项,分别是

  • i++循环
  • 冒泡排序
  • 八皇后问题【提高到了12皇后】

测试了四个平台/编译器:

  • .Net Core 1.1.0
  • .Net Framework 4.5.2
  • MinGW G++ 【具体版本未知,这个要怎么看啊】
  • MSBuild 【VS2017带的那个,目标c++】

所有测试都用程序跑了10遍,get用时总和的,受环境影响,肯定有误差

测试程序代码:

#include <iostream>#include <ctime>using namespace std;int main (int argc, char *argv[]) {    int s, e, i;    long long int sum;    if (argc < 2) return 0;    cout << argv[1] << "||" << endl;    sum = 0;    for (i = 1; i <= 10; i++) {        s = clock ();        system (argv[1]);        e = clock ();        cout << i << " : " << e - s << endl;        sum += e - s;    }    cout << "sum : " << sum << "  avg : " << sum / 10 << endl;    return 0;}

For循环测试代码:

c++:

#include <iostream>using namespace std;int main (void) {    int i, j;    for (j = 0; j < 2; j++) {        for (i = 0; i < 200000000; i++);    }    return 0;}

c#【c#代码只放核心部分,顶上的一堆using和namespace、class就不放了】:

static void Main(string[] args) {    int i, j;    for (j = 0; j < 2; j++) {        for (i = 0; i < 200000000; i++) ;    }}

冒泡排序代码:

c++:

#include <iostream>using namespace std;int arr[10000] = {【为了屏蔽输入输出差异,我放了1w个值在这,就不往这放了,10000个数,。。。】};int arrlen = 10000;int main (void) {    int i, j, t;    for (i = arrlen - 1; i > 0; i--) {        for (j = 0; j < i; j++)        if (arr[j] > arr[j + 1]) {            t = arr[j];            arr[j] = arr[j + 1];            arr[j + 1] = t;        }    }    // for (i = 0; i < arrlen; i++) {    //     cout << i << " " << arr[i] << endl;    // }    return 0;}

C#:

static int[] arr = new int[10000] {【这里同c++那块】};static void Main(string[] args) {    int i, j, t;    for (i = arr.Length - 1; i > 0; i--) {        for (j = 0; j < i; j++) {            if (arr[j] > arr[j + 1]) {                t = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = t;            }        }    }    //for (i = 0; i < arr.Length; i++) {    //  System.Console.WriteLine("{0:0000} : {1}", i, arr[i]);    //}    //Console.ReadKey();}

12皇后:

c++:

#include <iostream>using namespace std;int lefts[64];int sum = 0;int noh = 8; // 皇后数量int check (int t, int l) {    if (t == 0) return 1;    for (int i = 0; i < t; i++) {        if (lefts[i] == l) return 0;        if (i + lefts[i] == t + l) return 0;        if (i - lefts[i] == t - l) return 0;    }    if ((lefts[t - 1] == l - 1) || (lefts[t - 1] == l + 1)) return 0;    return 1;}void DFS (int nowdeep) {    if (nowdeep == noh) {        sum++;        return;    }    for (int i = 0; i < noh; i++) {        if (check (nowdeep, i)) {            lefts[nowdeep] = i;            DFS (nowdeep + 1);        }    }}int main (void) {    noh = 12; // 将皇后改为12只    sum = 0;    DFS (0);    cout << sum << endl;    return 0;}

c#:

static int[] lefts = new int[64];static int sum = 0, noh = 8;static bool Check(int t, int l) {    if (t == 0) return true;    for (int i = 0; i < t; i++) {        if (lefts[i] == l) return false;        if (i + lefts[i] == t + l) return false;        if (i - lefts[i] == t - l) return false;    }    if ((lefts[t - 1] == l - 1) || (lefts[t - 1] == l + 1)) return false;    return true;}static void DFS(int nowdeep) {    if (nowdeep == noh) {        sum++;        // for (int i = 0; i < noh; i++) cout << lefts[i];        // cout << endl;        return;    }    for (int i = 0; i < noh; i++) {        if (Check(nowdeep, i)) {            lefts[nowdeep] = i;            DFS(nowdeep + 1);        }    }}static void Main(string[] args) {    noh = 12;    DFS(0);    Console.WriteLine(sum);    //Console.ReadKey();}

测试结果:

本结果c++无优化,.Net也是Debug的配置下生成的

平台 for循环 冒泡排序 12皇后 空载【啥都不跑】 113 c++ 9713 3326 3147 msc++ 10981 3301 7018 .Net Core 13377 10337 8774 .Net F4 13254 5089 5584

开启优化后测试

c++:O2【VS2017开启Release,优化级别也是O2】,.Net使用Release配置生成

平台 for循环 冒泡排序 12皇后 c++ 193 1912 2254 Core 2305 3337 3437 net 1908 2917 2284 msc++ 204 1865 2048

来张图

这里写图片描述

Core:天塌下来我顶着!

这次测试的方向挺单一的说实话,仅做参考

0 0
原创粉丝点击