日期:2014-05-20  浏览次数:20889 次

[讨论]计算速度
最近在研究并行的时候与到了一个让我迷糊的问题。
先看如下代码
C# code
            for (int i = 0; i < 100000; i++)
                for (int k = 0; k < 100000; k++)
                {
                    
                }

VB.NET code

        For i As Integer = 0 To 100000
            For k As Integer = 0 To 100000

            Next
        Next


在我的计算机上运行以上两段代码分别用了4250(C#),8484(VB),C#快了一倍。
我觉得有问题,所以我把代码发给其他人让他们分别进行测试,可得到的结果却让我更迷糊了。
路人甲(Intel P8400 2.29GHz)
278945(C#),246294(VB)

路人乙(Intel T7500 2.2GHz)
35381(C#),25366(VB)

我的计算机(Intel E4600 2.4GHz)

问题一
为何我机器上VB.NET编写的程序会比C#编写的慢一倍,而其他人的机器却都是VB的比C#的要快?

问题二
为何我的计算时间会比其他人的都快了近10倍?我的CPU虽然比其他人的要好些,可也不至于有如此大的差距吧?

------解决方案--------------------
另外,最好运行.exe看,而不要再.net中F5运行
------解决方案--------------------
用Debug Release分别编译成EXE后,再到其它人电脑上测试

要注意,测试的结果必须包括
1. 操作系统版本
2. CPU
3. 内存,并且是否双通道
4. 项目类型(Winform、Console、Asp.net)
这样才能统计下

1. Win7 Sp2
2. 赛扬 E3300 超频到3.33G
4. 内存 3G,外频800,本人认为不是双通道,CPU-Z中显示双通道
4. Console

跑分
一、C#
1. Debug 
开始执行不调试 22720 开始执行调试 22625 基本一致,在误差范围内
2. Release 
开始执行不调试 3120 开始执行调试 22325 相差很大

二、VB
1. Debug 
开始执行不调试 20545 开始执行调试 19251 基本一致,在误差范围内
2. Release 
开始执行不调试 6256 开始执行调试 22136 相差很大

三、以上结果都测试了多次,基本在上述结果上下浮动,可认为是误差

四、VB在Release下,居然和C#相差一倍,未解

五、顺便问问楼主及各位兄弟,为什么VS 2008下
1.Release模式也能调试(其实可以猜到,Release模式下,按F5生成的代码在执行效率上既然和Debug模式没差别,那其实就是Debug模式了,但仅是猜测,有没有板油有理论依据的)
2.Release模式下,DLL文件或EXE文件,也生成PDB文件(应该是调试信息吧),每次都要删除,烦啊,有没有什么办法Release模式下不生成
  
最后,提醒楼主,VB中的内外循环都比C#多一次,在我代码里已修正。
------解决方案--------------------
我的测试也是C$比vb快了近一倍,我的机器是老机器(2006年的,ddr2G),c#6453毫秒,vb11000毫秒。win7操作系统。