Qt和C# for循环效率比较

背景:

近日,捡起了多年未用的matlab,突然发现很多函数都不会用了,只是记得有这个功能,但是,却不知道怎么写,尤其是matlab没有提示功能,写起代码真的是不习惯。因此,此时的感觉是无奈又无助。

正在烦躁无聊之际,看到群里有人发问,说c#的for循环效率高于Qt,觉得不可思议,并将代码贴到了群中,但是没有给出结果。群中很多人对代码进行了一系列批评,说数据类型不一样的,无法比较等等,但是,大家都有一个共识:即不可能效率高于Qt。

为了探查二者的效率究竟如何,觉得还是自己亲自试一下比较好,同时,也尽量使自己不做一个坐而论道者,而是亲自区验证一下。


验证过程

依据群里的代码,自己做了一些改动,如下

C#代码,c#运行环境采用visiual studio 2019 社区版,dotnet framework 4.8 。

DateTime startT = DateTime.Now;
            Int64 total = 0;
            for (int i = 0; i < 1000000000; i++)
            {
                total += i;
            }

            DateTime endT = DateTime.Now;
            TimeSpan ts = endT - startT;
            Console.WriteLine("C#-duration:" + ts.TotalMilliseconds.ToString() + "ms;total=" + total.ToString());
        

Qt代码,群中人采用了long long 数据类型,后面很多人回复,说longlong 和c#中的int64 不是同一种类型,没有可比性,所以,按照群中人的建议,用qint64类型,又做了一遍

// long long
    QTime startT=QTime::currentTime();
    long long total=0;
    for (long long var = 0; var < 1000000000; ++var) {
        total+=var;

    }
    QTime endT=QTime::currentTime();

    int duration=startT.msecsTo(endT);
    qDebug()<<"Qt-(long long)duration:"<<duration<<"ms;total="<<total;

// qint64 方案

//qint64
    QTime startT=QTime::currentTime();
    qint64 total=0;
    for (qint64 var = 0; var < 1000000000; ++var) {
        total+=var;

    }
     QTime endT=QTime::currentTime();

    int duration=startT.msecsTo(endT);
     qDebug()<<"Qt-(qint64)duration:"<<duration<<"ms;total="<<total;

本人电脑情况:


 

运行结果:

经过运行结果如下:

c#多次运行结果:

C#-duration:2946.3285ms;total=499999999500000000
C#-duration:2944.3291ms;total=499999999500000000
C#-duration:2942.3118ms;total=499999999500000000
C#-duration:2915.8663ms;total=499999999500000000
C#-duration:2948.9808ms;total=499999999500000000
C#-duration:2951.3062ms;total=499999999500000000


Qt long long 方案多次运行结果

Qt-(long long)duration: 2738 ms;total= 499999999500000000
Qt-(long long)duration: 2745 ms;total= 499999999500000000
Qt-(long long)duration: 2749 ms;total= 499999999500000000
Qt-(long long)duration: 2724 ms;total= 499999999500000000
Qt-(long long)duration: 2749 ms;total= 499999999500000000
Qt-(long long)duration: 2733 ms;total= 499999999500000000


Qt qint64方案多次运行结果

Qt-(qint64)duration: 2733 ms;total= 499999999500000000
Qt-(qint64)duration: 2720 ms;total= 499999999500000000
Qt-(qint64)duration: 2729 ms;total= 499999999500000000
Qt-(qint64)duration: 2713 ms;total= 499999999500000000
Qt-(qint64)duration: 2768 ms;total= 499999999500000000
Qt-(qint64)duration: 2717 ms;total= 499999999500000000

通过上述分析,可见c#运行速度没有Qt速度快。

同时,需要指出的是,群中C#代码输入语句写为ts.ToString(),而不是我写的ts.TotalMilliseconds.ToString(),前者在输出的时候,输出结果为【C#-duration:00:00:02.9394304ms;total=499999999500000000】,这个结果的单位实际上不是ms,这是写法错误,是不是这样导致了他认为效率远高于Qt。因此,在比较的时候,一方面要看清楚输出结果的单位,同时,在运行的时候,如果是在线监督运行结果的话,你观测结果的输出,可以有这么一种感觉,即几种方法的结果输出时间没有明显的差异。

ts输出毫秒的方式是ts.TotalMilliseconds,这应该是这个问题出错的原因。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值