哎,不得不说最近见得键盘侠客太多了,作程序员没两天老是喜欢上嘴唇触天,下嘴唇碰地的吹。java
本身分明都没用过几门语言,就对各门语言评头论足说三道四,这么语言多好那门语言有多烂。python
多是随着时间也变得没那么浮躁,这换我刚毕业时候我估计我不免也加入其中与其争论一番,工做这么些年了心里平静了很多。android
再听那些毛头小子们评头论足的我也就是微微一笑就算了。程序员
可是,忽然也起了兴趣,各门语言的效率究竟能差多少,之前还真没作过相关的试验。真理不是据说、好像、估计就能出结果的。算法
没有依据的话那叫信口雌黄。说出一个结果时候你得有足够的依据。c#
就拿我最熟悉的几门语言坐下对比,分别为C,C#,JAVA,Python。数据结构
c,早在学生阶段就每天再用,学习数据结构时候不知道写了多少c代码。函数
c#,是我如今天天在用的语言,使用c#严谨的语法+强大IDE,写代码比为爱鼓掌还爽。性能
java,目前写过许多android程序,网站也作过一些。学习
Python,目前为止并未在工做中实际使用过,但用python写过很多爬虫。
相对来讲以上四门语言我还都很熟悉,不存在新手不懂这门语言,发挥不出性能这种事了吧?
而后报一下机器配置,配置算是中等偏上吧,可是写代码足够了。
说一下测试逻辑
一个求水仙花数的算法,而后执行一万次。测试每门语言的执行时间。
为告终果可信度高,算法纯手写,不采用任何库,第三方包。
首先测试老大哥c语言。
不得不说你大爷仍是你大爷,别看你大爷年龄大,依然宝刀未老,作起事情来依然长枪直入。
测试结果仅为 1009ms。速度不错,但其余语言尚未执行,也很差说c究竟有多牛B。
#include<stdio.h> #include "stdafx.h" #include<time.h> //用到clock()函数 void NarcissisticNumber() { int ge, shi, bai; for (int n = 100; n < 100000; n++) { ge = n % 10; shi = (n - ge) / 10 % 10; bai = (int)(n / 100); if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) { //printf("%d", n); } } } int main() { int begintime, endtime; int a[1002]; begintime = clock(); int i = 100; for (i = 1; i <= 10000; i++) { NarcissisticNumber(); } endtime = clock(); printf("\n\nRunning Time:%dms\n", endtime - begintime); getchar(); return 0; }
与其说c是你大爷,C#多是个小家碧玉,小妞不错,要脸蛋有脸蛋要身材有身材,听话懂事。就是微软这个家长家教太严不让出门。
如今他爹彷佛意识到了这一点,鼓励c#出去闯闯,争取变成你们闺秀,好了到咱们的小家碧玉大显身手的时候了,测试结果15130比他大爷慢了十倍多。
static void Main(string[] args) { Stopwatch watch = new Stopwatch(); Console.WriteLine("开始计时"); watch.Start(); for (int i = 1; i < 10000; i++) { NarcissisticNumber(); } watch.Stop(); string time = watch.ElapsedMilliseconds.ToString(); Console.WriteLine($"C#执行时间:{time}"); Console.ReadKey(); } public static void NarcissisticNumber() { int ge, shi, bai; for (int n = 100; n < 100000; n++) { ge = n % 10; shi = (n - ge) / 10 % 10; bai = (int)(n / 100); if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) { //Console.WriteLine(n.ToString()); } } }
到咱们的性感少妇了,java从出道以来,追求者无数。至今不知道多少企业临幸过java,多少门技术厚着脸皮,穷追不舍得追求着java这小niang们。俗话说的好,
美女身后苍蝇多,java身后的苍蝇简直多的数不胜数。可是java这小妖精玩得转,身后的苍蝇们(库)不乏优秀能干者。
好了咱们看看少妇的办事能力9372ms,这个结果然的有够惊讶。本觉得在微软的平台上,java的执行效率不会高过c#(白白浪费了我临幸c#这么多年)。结果竟然
高出了一大截。
public static void main(String args[]) { System.out.println("开始计算"); long startTime = System.currentTimeMillis(); for (int i = 1; i < 10000; i++) { NarcissisticNumber(); } long endTime = System.currentTimeMillis(); System.out.println("程序运行时间:" + (endTime - startTime) ); } public static void NarcissisticNumber() { int ge, shi, bai; for (int n = 100; n < 100000; n++) { ge = n % 10; shi = (n - ge) / 10 % 10; bai = (int) (n / 100); if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) { //System.out.println(String.valueOf(n)); } } }
接下来到咱们的小妖精了,python真的我只能用小妖精来形容他。虽然他出生的很早,可是一直默默无闻。就是这些年忽然爆发了,简直无所不能。
游戏,网站,应用程序,爬虫,AI。这小妖精就是用妖法迷住了你们,小妖精就是小妖精,活好不粘人,一切本着不主动、不拒绝、不负责的行事原则。你大爷(c)手艺牛逼,老年人唠叨(代码复杂)。
小家碧玉虽然好奈何教教太严,性感少妇苍蝇多。小妖精简直不要太简单。
好了,看看咱们的小妖精究竟有多大本事。。。。
首先我跟你们解释下,其余语言进行了10000次水仙花,而python只进行1000次。是由于若是python要执行10000次几分钟都出不告终果,
我不敢相信这门语言真的差到这种程度,若是算法写的有问题,还请你们指教。
python 1000次执行结果54404ms,彻底无法跟以上语言相比。这个结果我真的不敢相信。。。。
import time def NarcissisticNumber(): ge = 0 shi = 0 bai = 0 for n in range(100,100000): ge = n% 10 shi = (n - ge) / 10 % 10 bai = int(n / 100) if ge * ge * ge + shi * shi * shi + bai * bai * bai == n: continue print("开始计时") start = time.time() for each in range(1000): NarcissisticNumber() end = time.time(); print("Python运行时间:"+str((end - start)*1000))
最后强调下,以上全部debug模式。
好的,老铁们。这篇文章收货了太多黑跟质疑了。
首先我认可,有些问题牵考虑的。例如debug模式。
可是我无心黑C#,自打毕业以来天天都在敲c#,c#
对个人感情大家不了解,说我对比没有意义的。我也认可
的确没有意义,没门语言都有本身的长项,本次测试仅仅
为了测试,难道你能由于java执行的比c#快就再也不用c#?
技术这个东西永远只有更高没有最高,明天我还会更新本篇帖子的续篇。
这篇帖子只有这位老兄的回复最为中肯。 @五星
续篇里我改进如下几个问题
1.再也不使用debug,使用release模式。java直接编译成.class文件直接运行
2.防止编译时对代码优化,if 里面要搞点事情
3.屡次测试
最后再强调本次测试仅为测试,甚至能够说是为了玩,无心黑某门语言。这几门语言每门语言我都喜欢。
技术讨论观点分歧再所不免,理性讨论,请勿出言不逊。言行表明素质,代码能力能够查,人的修养不能差。
我是擅长接受建议的,我也不抵触反对,但反对他人的同时你要拿出你本身的看法与方案,要否则与键盘侠何异?