呵呵,据权威的测试,以java编写的计算方面的程序已经速度与C/C++没有什么差别了,而在I/O方面差距较大。

解决方案 »

  1.   

    JDK1.4以后,IO的差别也不是很大。
      

  2.   

    同意adailee(为了一棵树,我放弃了整个森林),绝对不是解释型语言。
      

  3.   

    我口误大家不要见怪,中间代码语言~`````我的意思只是说她们不是2进制代码的语言~````=================
    呵呵,据权威的测试,以java编写的计算方面的程序已经速度与C/C++没有什么差别了,而在I/O方面差距较大。
    =================
    真的吗????
    我觉得这种速度已经非常慢了,四十多分钟啊,我做测试的机器CPU是1G的~````
      

  4.   

    汇编吧,绝对比任何一种都快反编译一下VC标准API的release出来的东东,看看多浪费性能,MFC浪费的就更多了,看看VB他的资源回收什么的就多几十行出来,而且明明可以用几条指令很少个CPU周期完成的指令,非要用十几条指令完成,明明取了放在寄存器可以反复使用,编译器优化了还非要再去内存取一次,寄存器操作才一个周期,内存操作就五个周期。
    由此可见,讲效率,用汇编吧,[原来你的电脑可以更快的]
      

  5.   

    我且不说到底谁的效率高,但是就凭算质数来下结论肯定是不准确的。我可以写个算法让JAVA比C#运行的更久些。我打个比方吧,比如说你在冬天和夏天比较脱裤子放屁。经过测试,你很高兴的说:啊!夏天放屁真方便,裤衩一拉就行了,相比冬天裤子穿的多,脱起来比较麻烦。尽管夏天放屁方便,但是到冬天你还是要穿上很多裤子。(其实不脱裤子一样可以放屁。呵呵!)
      

  6.   

    ericvan(骨灰虫) 你的比方真烂~~
      

  7.   

    C#的程序占内存大有两方面的原因,启动C#的程序就要启动.net的虚拟机,这个就需要内存。另外一个对象退出作用域之后,所占的内存并没有马上被回收,而是要等到GC运行之后才行,这占了一部分内存。
      

  8.   

    大家不要误会我的意思,我只是比较C#和JAVA在运算方面的速度,并不是比较两种语言谁快,只是单纯的运算方面而已
    还有不要老是什么“汇编”的挂着,我比较JAVA和C#关汇编什么事?机器码比汇编还快呢~~``不过有趣的是,C#程序和JAVA程序同时运行时,系统大量的资源都给了C#,这点到是JAVA非常吃亏哦?我也不知道为什么~``
      

  9.   

    真的对你的算法有怀疑哦,看看这个帖子。http://community.csdn.net/Expert/topic/3409/3409231.xml?temp=.5807306
    这位同学的算法在Python下找10000000以内所有素数,并且逐行输出,都不要你那么长时间。而且这个算法稍稍改正一下,验证一个数的时候,不要去遍历所有已知素数,只要遍历到小于当前所求数的平方根的素数即可(这是Eratosthenes筛法,不知道中文怎么翻译)。这样一改的话,还可以快无数倍,不知道你是怎么算的。
      

  10.   

    C#/java与C++的差距不在速度上,在占用内存的数量上。
      

  11.   

    C#/java与C++的差距不在速度上,在占用内存的数量上。
    --------------------
    内存的不断存取,难道不影响速度?内存又不是占着不动,要存取的嘛!
      

  12.   

    把代码贴上来都觉得不好意思,因为我的代码写的并不好~``但是我觉得代码是否效率高和两个语言的比较并无啥关系:)毕竟是比较两语言运行这代码的速度,而代码写的好不好是另外一回事:)c#/////////////////////////////////////////////////////////////////////using System;namespace ConsoleApplication1
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    System.DateTime mydata2,mydata1;
    Console.Write("请输入查找个数:");
    int nnn=Convert.ToInt32(Console.ReadLine());
    mydata1=System.DateTime.Now;
    int x=0;
    int ii=0;
    bool mybool;
    double sum=0;
    int g=System.Convert.ToInt32(System.Math.Sqrt(nnn)+1);
    for (int i=2;i<=nnn;i++)
    {
    mybool=true;
    for(ii=2;ii<g;ii++)
    {

    if(i % ii==0)
    {
    mybool=false;
    sum++;
    break;
    }
    }
    if(mybool)
    {
    System.Console.Write(i.ToString()+",");
    x++;
    } }
    mydata2=System.DateTime.Now;
    Console.WriteLine("\n\n\n找到个数:"+x.ToString()+"  运算次数:"+sum.ToString());
    Console.WriteLine("\n运行时间:"+(mydata2-mydata1)+"   查找个数:"+nnn.ToString());
    Console.WriteLine("\n"+mydata1.ToString()+"  --  "+mydata2.ToString());
    Console.ReadLine(); }
    }
    }
    java///////////////////////////////////////////////////////////////
    import java.util.Date;
    public class T {
        public T() {    }    public static void main(String[] args) {
            T t = new T();
            Date d1, d2;
            d1 = new Date();
            int x = 0;
            double sum = 0;
            double mm = 1000000000;
            int g = (int) Math.sqrt(mm) + 1;
            int i, ii;
            boolean b = true;
            for (i = 2; i <= mm; i++) {
                b = true;
                for (ii = 2; ii < g; ii++) {
                    if (i % ii == 0) {
                        b = false;
                        sum++;
                        break;
                    }            }
                if (b) {
                    System.out.print(i + ",");
                    x++;
                }
            }
            d2 = new Date();
    System.out.println();
    System.out.println("找到个数:"+x+"  运算次数:"+sum);
            System.out.println(d1 + "  --  " + d2);
        }
    }
      

  13.   

    补充:运行C#的代码的时候比运行JAVA代码的内存要高出4M左右:)
      

  14.   

    我层用过C#写SQL往数据库插记录,结果花了我很久才插了几百万条,最后放弃了。科学计算主要是机器的快慢,跟具体的语言关系不是特别大
      

  15.   

    难怪要算这么久,两个循环都有问题。
    第一个循环:步长不应该是i++,因为大于2的偶数都是合数嘛,有什么好算的,步长改为+2。
    第二个循环:g应该是i的平方根,而不应该是nnn的平方根。而且这个循环中ii应该遍历所有已经求出来的素数,而不应该是ii++这样去遍历。我估计算1亿的话应该在5分钟左右,我用python算也就花了10分钟。
    楼主可以改改,然后告诉大家结果。尽量用最简单的数据结构和最简单的方法。不要输出,算完就给个提示,C#和JAVA输出机制的不同也会影响结果。尽量不要让循环体内出现C#或Java独有的方法。
      

  16.   

    To:waximi(阿猫)
    我层用过C#写SQL往数据库插记录,结果花了我很久才插了几百万条,最后放弃了。科学计算主要是机器的快慢,跟具体的语言关系不是特别大
    --------------------------------------------------------
    大哥:这个也不是和C#关系很大吧?而应该是和Sql server关系比较大(同硬件).一般批量插入用事务也更快些.