为什么vb.net这么快?

时间:2013-08-01 22:41:49

标签: .net vb.net

我用几种语言编写了相同的控制台应用程序。应用程序向用户询问一个数字,并从1到该数字进行计数,在控制台的单独行上打印每个数字。我实际上期望vb.net在编程语言中变得最糟糕,让我好奇的是它没有,它实际上是最快的。

VB.Net - 运行VS调试器:

Sub Main()
    Console.Write("Give me a number, any number: ")

    For i = 1 To CInt(Console.ReadLine)
        Console.WriteLine(i)
    Next

    Console.ReadLine()
End Sub

C ++ - 运行VS调试器(比VB慢约5倍):

#include <iostream>
using namespace std;

int main() {
cout << "Give me a number, any number: ";

int number; cin >> number;
cout << '\n';

for (int i = 1; i <= number; i++) cout << i << '\n';

while (true) {}
}

Haskell - 从控制台编译并运行(仅比VB略慢):

import System.IO
import Control.Monad 

main = do
    putStr "Give me a number, any number: "
    hFlush stdout

    input <- getLine
    mapM print [1..read input]

    return 0

Javascript - 在firefox中运行firebug(比VB慢很多):

for (i = 0; i<100000; i++){ console.log(i); }

Befunge - 使用chrome / javascript运行through this网站(比firefox快,但仍然比vb慢)

&1-0>1+:.134*+,\:#v_@
    ^          \-1<

那么简单,是什么让vb解决方案比其他语言更快?

2 个答案:

答案 0 :(得分:5)

为什么你会期望VB.NET最慢?编译完成后,VB.NET程序就是一个CIL程序,与c#程序相同。在.NET JIT编译器编译之后,它被编译为本机代码,并进行了相当优化。 Javascript是一种解释型语言,firebug是一个解释器/调试器,它会降低代码速度,因此您可以跟踪调试信息。我希望C ++调试器也是如此。当你运行没有调试器的c ++程序时,你得到的结果会变慢吗?

答案 1 :(得分:-1)

当被要求在Release下优化和运行时,c ++会变慢,没有附加调试器,原因,c ++不是一种缓存语言,它必须在每一步都能解决所有问题。与CIL相比.Net Framework意识到它是相同的操作并解决了差异。加上c ++是一种古老的语言。