为什么我的C#代码比我的C代码快?

时间:2015-08-10 14:25:14

标签: c# c++ c

我在Windows操作系统上启动这两个控制台应用程序。 这是我的C#代码

int lineCount = 0;
StreamWriter writer = new StreamWriter("txt1.txt",true);
for (int i = 0; i < 900; i++)
{
    for (int k = 0; k < 900; k++)
    {
        writer.WriteLine("This is a new line" + lineCount);
        lineCount++;
    }
}

writer.Close();
Console.WriteLine("Done!");
Console.ReadLine();

这是我的C代码。我假设它是C,因为我包含了cstdio并使用了标准fopenfprintf函数。

FILE *file = fopen("text1.txt","a");

for (size_t i = 0; i < 900; i++)
{
    for (size_t k = 0; k < 900; k++)
    {
        fprintf(file, "This is a line\n");
    }
}

fclose(file);
cout << "Done!";

当我启动C#程序时,我立即看到消息“完成!”。当我启动C ++程序(使用标准C函数)时,它等待至少2秒钟才能完成,并向我显示消息“完成!”。

我只是在玩它来测试他们的速度,但现在我觉得我不知道很多东西。有人可以向我解释一下吗?

注意:不可能重复“为什么C#运行速度比C ++快?”,因为我没有提供任何控制台输出,例如“cout”或“Console.Writeline()”。我只是比较文件流机制,它不包括任何可能干扰程序主要任务的干扰。

2 个答案:

答案 0 :(得分:12)

你正在比较苹果和土豆。您的C / C ++程序根本没有进行任何缓冲。如果你使用fstream缓冲你的结果会好很多:另见std::fstream buffering vs manual buffering (why 10x gain with manual buffering)?

答案 1 :(得分:0)

我认为这不是比较语言之间性能的合适方法。

无论如何c和c#是完全不同的野兽,当我认为主要区别在于C#是托管语言(CLR在后台运行并且做了大量工作,如优化等)而C则不是。

然而正如我所说,两者之间存在太多差异需要比较。