我要在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
并使用了标准的fopen
和fprintf
函数。
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()”。我只比较文件流机制,它不包括任何可能会中断程序主任务的干扰。
fprintf
(实际上没有执行任何格式化)。后者仍然需要解析格式字符串。另一个区别:.NET代码不等待本机文件句柄关闭,而非托管代码则需要。 - IInspectablefprintf
会将每一行实时写入文件,而StreamWriter
会先写入内存缓冲区,再优化磁盘写入。 - Heavy