相关疑难解决方法(0)

为什么C#比VB.NET更慢地执行Math.Sqrt()?

背景

在今天早上运行基准测试时,我和我的同事发现了一些关于C#代码与VB.NET代码性能的奇怪之处.

我们开始比较C#与Delphi Prism计算质数,发现Prism的速度提高了约30%.在生成IL时,我认为CodeGear优化代码更多(exe大约是C#的两倍,并且有各种不同的IL.)

我决定在VB.NET中编写一个测试,假设微软的编译器最终会为每种语言编写基本相同的IL.然而,结果更令人震惊:C#的代码运行速度比VB运行速度快三倍以上!

生成的IL是不同的,但并非极端如此,而且我不太善于阅读它以理解差异.

基准

我已经在下面列出了每个代码.在我的机器上,VB在大约6.36秒内找到了348513个素数.C#在21.76秒内找到相同数量的素数.

计算机规格和注释

  • 英特尔酷睿2四核6600 @ 2.4Ghz

我在那里测试的每台机器在C#和VB.NET之间的基准测试结果上都有明显的差异.

两个控制台应用程序都是在发布模式下编译的,但是否则没有从Visual Studio 2008生成的默认值更改项目设置.

VB.NET代码

Imports System.Diagnostics

Module Module1

    Private temp As List(Of Int32)
    Private sw As Stopwatch
    Private totalSeconds As Double

    Sub Main()
        serialCalc()
    End Sub

    Private Sub serialCalc()
        temp = New List(Of Int32)()
        sw = Stopwatch.StartNew()
        For i As Int32 = 2 To 5000000
            testIfPrimeSerial(i)
        Next
        sw.Stop()
        totalSeconds = sw.Elapsed.TotalSeconds
        Console.WriteLine(String.Format("{0} seconds elapsed.", totalSeconds))
        Console.WriteLine(String.Format("{0} primes found.", temp.Count))
        Console.ReadKey() …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net benchmarking

51
推荐指数
4
解决办法
3826
查看次数

标签 统计

.net ×1

benchmarking ×1

c# ×1

vb.net ×1