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

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

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

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

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

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

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

测试程序代码:

#include 
#include 

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 

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 

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 

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

来张图

据说.NetCore效率很高?性能简单测试_第1张图片

Core:天塌下来我顶着!

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

你可能感兴趣的:(据说.NetCore效率很高?性能简单测试)