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

本文关键字:代码 为什么 我的 | 更新日期: 2023-09-27 18:07:07

我在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秒才能完成并显示消息"Done!"。

我只是在测试他们的速度,但现在我想我不知道很多事情。有人能给我解释一下吗?

注意:不可能重复"为什么c#比c++运行得快? ",因为我没有给出任何控制台输出,如"cout"或"console . writeline()"。我只是比较文件流机制,它不包括任何形式的干扰,可以中断程序的主要任务。

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

你在比较苹果和土豆。您的C/c++程序根本没有做任何缓冲。如果你使用fstream和缓冲,你的结果会好很多:也看看这个std::fstream缓冲和手动缓冲(为什么手动缓冲增益10倍)?

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

无论如何,c和c#是完全不同的野兽,我认为主要的区别是c#是托管语言(有CLR在后台运行,做很多工作,如优化等),而c不是。

但是,正如我所说的,两者之间的差异太多,无法在这里进行比较。