哎,不得不说最近见得键盘侠客太多了,做程序员没两天总是喜欢上嘴唇触天,下嘴唇碰地的吹。

自己分明都没用过几门语言,就对各门语言评头论足说三道四,这么语言多好那门语言有多烂。

可能是随着时间也变得没那么浮躁,这换我刚毕业时候我估计我难免也加入其中与其争论一番,工作这么些年了内心平静了不少。

再听那些毛头小子们评头论足的我也就是微微一笑就算了。

但是,突然也起了兴趣,各门语言的效率究竟能差多少,以前还真没做过相关的试验。真理不是听说、好像、估计就能出结果的。

没有依据的话那叫信口雌黄。说出一个结果时候你得有足够的依据。

就拿我最熟悉的几门语言坐下对比,分别为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 = ; n < ; n++) {
ge = n % ;
shi = (n - ge) / % ;
bai = (int)(n / );
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) {
//printf("%d", n);
}
} } int main()
{
int begintime, endtime;
int a[];
begintime = clock();
int i = ;
for (i = ; i <= ; i++) {
NarcissisticNumber();
}
endtime = clock();
printf("\n\nRunning Time:%dms\n", endtime - begintime); getchar();
return ;
}

与其说c是你大爷,C#可能是个小家碧玉,小妞不错,要脸蛋有脸蛋要身材有身材,听话懂事。就是微软这个家长家教太严不让出门。

现在他爹似乎意识到了这一点,鼓励c#出去闯闯,争取变成大家闺秀,好了到我们的小家碧玉大显身手的时候了,测试结果15130比他大爷慢了十倍多。

        static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
Console.WriteLine("开始计时");
watch.Start();
for (int i = ; i < ; 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 = ; n < ; n++)
{
ge = n % ;
shi = (n - ge) / % ;
bai = (int)(n / );
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 = ; i < ; i++) {
NarcissisticNumber();
}
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) );
} public static void NarcissisticNumber() {
int ge, shi, bai;
for (int n = ; n < ; n++) {
ge = n % ;
shi = (n - ge) / % ;
bai = (int) (n / );
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.多次测试

最后再强调本次测试仅为测试,甚至可以说是为了玩,无意黑某门语言。这几门语言每门语言我都喜欢。

技术讨论观点分歧再所难免,理性讨论,请勿出言不逊。言行代表素质,代码能力可以查,人的修养不能差。

我是擅长接受建议的,我也不抵触反对,但反对他人的同时你要拿出你自己的见解与方案,要不然与键盘侠何异?

这段代码,c 1秒,java 9秒,c# 14秒,而python。。。的更多相关文章

  1. 一段代码让你秒懂java方法究竟是传值还是传地址

    先看看代码以及执行结果: 凝视写得非常清楚了.我就不多说了. 我说说我的结论.事实上在java中没有传值还是传址的概念,java仅仅有引用的概念.引用类似传址.只是是一个变量名中保存着对象的地址,地址 ...

  2. 【java】计算一段代码执行时长java.lang.System类里的public static long currentTimeMillis()方法

    public class Test_currentTimeMillis { public static void main(String[] args) { long start=System.cur ...

  3. java中 synchronized 的使用,确保异步执行某一段代码。

    最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一 ...

  4. 一段代码看 Java 引用类型

    Java 中的操作数(不知道叫什么,相对于 bytecode 而言,类似 CPU 的操作码和操作数)分为值类型和引用类型: 值类型就是直接存储最终数值的,如 char, int, float, dou ...

  5. 127个常用的JS代码片段,每段代码花30秒就能看懂(上)

    127个常用的JS代码片段,每段代码花30秒就能看懂(上) JavaScript 是目前最流行的编程语言之一,正如大多数人所说:“如果你想学一门编程语言,请学JavaScript.” FreeCode ...

  6. Unity 延迟执行一段代码的较为优雅的方式

    在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: voi ...

  7. [转]Unity 延迟执行一段代码的较为优雅的方式

    Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: void ...

  8. 为什么需要异步?why?来看一段代码。

    为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...

  9. C#计算一段代码的运行时间

    第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...

  10. 精练代码:一次Java函数式编程的重构之旅

    摘要:通过一次并发处理数据集的Java代码重构之旅,展示函数式编程如何使得代码更加精练. 难度:中级 基础知识 在开始之前,了解"高阶函数"和"泛型"这两个概念 ...

随机推荐

  1. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

  2. 痞子衡嵌入式:常用的数据差错控制技术(2)- 奇偶校验(Parity Check)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式里数据差错控制技术-奇偶校验. 在系列第一篇文章里,痞子衡给大家介绍了最简单的校验法-重复校验,该校验法实现简单,检错纠错能力都还不 ...

  3. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(6)- 打包发布(PyInstaller3.3.1)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之打包发布. 经过上一篇软件优化之后,Jays-PyCOM已经初长成,该到了出去历练的时候了,只有经 ...

  4. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的“Smobil ...

  5. webpack打包vue

    一.原理 webpack 背后的原理其实就是把所有的非 js 资源都转换成 js (如把一个 css 文件转换成“创建一个 style 标签并把它插入 document ”的脚本.把图片转换成一个图片 ...

  6. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  7. ios手机录屏软件哪个好

    苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...

  8. openlayers3 实现点选的几种方式

    WebGIS开发中,点击查询是最常用的一种查询方式,在ArcGIS api 中,这种查询叫IdentifyTask,主要作用是前台提交参数,交ArcServer查询分析返回.本文从开源框架的角度,从前 ...

  9. SuperMap GIS资料-----云与Web端技术资料集锦

    转自:http://blog.csdn.net/supermapsupport/article/details/70254484 产品白皮书 iServer产品  教学视频  许可说明  安装部署   ...

  10. C#:在匿名方法中捕获外部变量

    先来一段代码引入主题.如果你可以直接说出代码的输出结果,说明本文不适合你.(代码引自<深入理解C#>第三版) class Program { private delegate void T ...