新足迹

 找回密码
 注册

精华好帖回顾

· 我用 KIEHL'S 系列的一点心得 (2008-9-2) 晴天宝宝 · 【那些年的潮流】从03年到13年,人生有多少个十年?50+照片回顾走过的路!感恩惜福! (2013-3-23) 苏果
· 投资房 (2007-11-4) 吃喝拉撒睡 · 悉尼FORSTER自驾游攻略(完全版) (2006-6-8) woodgreen
Advertisement
Advertisement
12
返回列表 发新帖
楼主:audreamer

为什么现在还有很多的开源项目都在用C而不是C++来编程? [复制链接]

发表于 2013-1-26 16:01 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-26 14:58
Win下C#运行效率比Java高很多吧。

这个说法有什么根据吗
回忆是红色的天空
Advertisement
Advertisement

发表于 2013-1-26 16:54 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wil 发表于 2013-1-26 16:01
这个说法有什么根据吗

对一个几十G大的文件进行MD5或SHA运算就可以知道效率的区别了。

发表于 2013-1-26 17:39 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-26 16:54
对一个几十G大的文件进行MD5或SHA运算就可以知道效率的区别了。

能给出你测试的java和C#的对应代码吗?首先好奇你两个语言对大文件进行hash的算法是什么
回忆是红色的天空

发表于 2013-1-26 17:40 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 wil 于 2013-1-26 17:43 编辑

然后我们再想想办法看看如何tune performance

还有能解释一下为何在windows下会有这样的差异

发表于 2013-1-26 18:57 |显示全部楼层
此文章由 天使宝贝 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 天使宝贝 所有!转贴必须注明作者、出处和本声明,并保持内容完整
唉,看了那么久,还是没结果

发表于 2013-1-26 21:49 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wil 发表于 2013-1-26 17:39
能给出你测试的java和C#的对应代码吗?首先好奇你两个语言对大文件进行hash的算法是什么 ...

对JAVA不是很熟悉,这位同学如果对JAVA比较熟悉,能不能提供一个JAVA的程序,这样我们可以一起测试了。

.Net有MD5的函数,不需要自己写,直接调用就可以。

这里班门弄斧一下,刚刚用C#写了一个简单的显示MD5 HASH小程序,在我的Win7 32位的操作系统下, 用了19秒对我的SSD硬盘上Windows 8 Pro 64Bit的ISO文件进行MD5 HASH,编译好的文件放在http://wikisend.com/download/236778/MD5.exe

截图如下:




源程序:

using System;
using System.IO;
using System.Security.Cryptography;


namespace Hash_MD5
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Please specify the input file.");
                return;
            }
            string inputFilePath = args[0];
            if (!File.Exists(inputFilePath))
            {
                Console.WriteLine("The input file cannot be found.");
                return;
            }

            Console.WriteLine(DateTime.Now + " : Starting process file " + inputFilePath);
            try
            {
                FileStream fileStream = File.Open(inputFilePath, FileMode.Open);
                byte[] hashData = MD5.Create().ComputeHash(fileStream);
                string checksum = BitConverter.ToString(hashData).Replace("-", String.Empty);
                fileStream.Close();
                Console.WriteLine(DateTime.Now + " : The MD5 hash is " + checksum);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception : " + ex.Message);
            }
        }
    }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
Advertisement
Advertisement

发表于 2013-1-26 22:00 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Windows 8 Pro 64Bit的ISO文件的大小是:3.25 GB (3,490,912,256 bytes)

发表于 2013-1-26 22:36 |显示全部楼层
此文章由 无知的80后 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无知的80后 所有!转贴必须注明作者、出处和本声明,并保持内容完整
只会C的土著路过.。。。。

发表于 2013-1-27 06:11 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.codec.digest.DigestUtils;

import com.twmacinta.util.MD5;

public class md5 {
        public static byte[] createChecksum(String filename, int bufferSize) throws Exception {
                InputStream fis = new FileInputStream(filename);
                byte[] buffer = new byte[bufferSize];
                MessageDigest complete = MessageDigest.getInstance("MD5");
                int numRead;
                do {
                        numRead = fis.read(buffer);
                        if (numRead > 0) {
                                complete.update(buffer, 0, numRead);
                        }
                } while (numRead != -1);
                fis.close();
                return complete.digest();
        }

        static final String HEXES = "0123456789ABCDEF";
        public static String getHex(byte[] raw) {
                if (raw == null) {
                        return null;
                }
                final StringBuilder hex = new StringBuilder(2 * raw.length);
                for (final byte b : raw) {
                        hex.append(HEXES.charAt((b & 0xF0) >> 4)).append(HEXES.charAt((b & 0x0F)));
                }
                return hex.toString();
        }

        public static void main(String args[]) {
                try {
                        String inputFilePath = "E:\\Games\\Street.Fighter.X.Tekken.full.rip.rar";
                        System.out.println("file size: " + new File(inputFilePath).length());
                        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss a");
                       
                        System.out.println();
                        System.out.println("---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 1024");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum1 = getHex(createChecksum(inputFilePath, 1024));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum1);
                       
                        System.out.println();
                        System.out.println("---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 2048");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum11 = getHex(createChecksum(inputFilePath, 2048));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum11);
                       
                        System.out.println();
                        System.out.println("---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 4096");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum111 = getHex(createChecksum(inputFilePath, 4096));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum111);
                       
                        System.out.println();
                        System.out.println("---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 8192");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum1111 = getHex(createChecksum(inputFilePath, 8192));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum1111);
                       
                        System.out.println();
                        System.out.println("---- http://commons.apache.org/codec/ ... st/DigestUtils.html");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum2 = DigestUtils.md5Hex(new FileInputStream(inputFilePath));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum2);
                       
                        System.out.println();
                        System.out.println("---- http://www.twmacinta.com/myjava/fast_md5.php: No Native!");
                        System.out.println(format.format(new Date()) + " : Starting process file " + inputFilePath);
                        String checksum3 = MD5.asHex(MD5.getHash(new File(inputFilePath)));
                        System.out.println(format.format(new Date()) + " : The MD5 hash is " + checksum3);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

===========================================
file size: 4447788589

---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 1024
27/01/2013 05:48:37 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:48:56 AM : The MD5 hash is 648BE3603648E824AA3125DF9D1BA21A

---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 2048
27/01/2013 05:48:56 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:49:13 AM : The MD5 hash is 648BE3603648E824AA3125DF9D1BA21A

---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 4096
27/01/2013 05:49:13 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:49:28 AM : The MD5 hash is 648BE3603648E824AA3125DF9D1BA21A

---- http://www.rgagnon.com/javadetails/java-0416.html: bufferSize = 8192
27/01/2013 05:49:28 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:49:42 AM : The MD5 hash is 648BE3603648E824AA3125DF9D1BA21A

---- http://commons.apache.org/codec/ ... st/DigestUtils.html
27/01/2013 05:49:42 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:50:01 AM : The MD5 hash is 648be3603648e824aa3125df9d1ba21a

---- http://www.twmacinta.com/myjava/fast_md5.php: No Native!
27/01/2013 05:50:01 AM : Starting process file E:\Games\Street.Fighter.X.Tekken.full.rip.rar
27/01/2013 05:50:17 AM : The MD5 hash is 648be3603648e824aa3125df9d1ba21a

===========================================
4个多g的rar文件,文件也在ssd上,分别测试了几种方法。。。。

我也是爱较这个真,大家在论坛上随便说说的其实不该较真。。比较两个语言的性能,这个话题太大,大到相差不多的语言之间的性能比较都没有什么现实意义。就拿这个md5的例子来说,谁知道C#内部怎么实现的,它也不开源,没准是调用c的实现,这个java也同样能(http://www.twmacinta.com/myjava/fast_md5.php,这个实现就是先试图找本地原生语言支持的,但我的最后一个测试没有用到,还是跑的java程序)。如果大家公平点都在各自虚拟机里跑,C#在只调.NET,java只调JVM,这个我可以认真的说,同为虚拟机JVM确实比.NET要成熟些,Java是很烂但JVM绝对是精品,至于为什么这么说这个有兴趣就自己搜搜吧,话题太大。我个人觉得语言层面C#要比Java高级,虚拟机方面还是没法比的。不管怎么说,让这个帖子回归娱乐贴吧。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1积分 +2 收起 理由
audreamer + 2 感谢分享

查看全部评分

回忆是红色的天空

发表于 2013-1-27 09:48 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wil 发表于 2013-1-27 06:11
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

看来JAVA的效率也不错呀。

发表于 2013-1-28 11:46 |显示全部楼层
此文章由 Harvi 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Harvi 所有!转贴必须注明作者、出处和本声明,并保持内容完整
C++ 的机会本来就越来越少
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2013-1-28 12:50 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
C的速度无人出其右

发表于 2013-1-28 13:47 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Harvi 发表于 2013-1-28 11:46
C++ 的机会本来就越来越少

与C++比起来,C的工作机会如何?

发表于 2013-1-28 13:51 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
http://www.seek.com.au/Job/open- ... rn-suburbs/23891467

多好的学习ruby的机会,程序员应该多掌握几门语言,我已经会三门,再学ruby怕乱套了,而且我也不是动态语言的粉,不过这个机会是挺好的
回忆是红色的天空

发表于 2013-1-29 09:42 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2013-1-26 10:40
Java 没这么低吧?上个工作和现在的工作核心系统都是Java 做的,.net 就是开发一些边缘的应用。 ...

嗯,我觉得java和c++应该是一个级别的,做这个图片的人可能对java有偏见
平生不修善果,只爱杀人放火

发表于 2013-2-1 09:23 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Advertisement
Advertisement

发表于 2013-2-1 10:32 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wil 发表于 2013-1-27 06:11
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

很有意思啊, 我是做。net的, 感觉在windows上JVM比clr做的还要好, 很难相信啊, 能不能再具体谈谈呢

发表于 2013-2-1 12:18 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wil 发表于 2013-2-1 09:23
http://www.quora.com/Programming-Languages/If-there-is-a-war-of-programming-languages-who-would-you- ...

有点意思,不知道PHP的粉丝看了会有什么反应。

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部