ofstream file;
file.open(plik);
for(int i=0;i<251;i++){
for(int j=0;j<81;j++)
file<<(i-100)*0.01<<" "<<(j-40)*0.01<<" "<<U[i][j]<<endl;
file<<endl;
}
我猜这很快(我对吗?:)) Java
void SaveOutput(double[][] U, String fileName) throws IOException
{
PrintWriter tx = new PrintWriter(new FileWriter(fileName));
for(int i=0;i<251;i++)
{
for(int j=0;j<81;j++)
{
tx.println(String.format("%e %e %e ",(i - 100) * dz, (j - 40) * dz, U[i][j]));
}
tx.println();
}
tx.close();
}
这个 C# 的例子很相似。
但我有些困惑。我为每一行创建了一个 String 对象(会产生很多垃圾)。在这个例子中,不是那么多,但有时我有 1000 万行。这让我产生了以下问题:
- C++ 的示例能更快吗?
- 我应该使用 Java 的 StringBuilder,还是因为行数太多也不好用?
- 还有其他方法或库吗?
- C# 呢?
谢谢!
'\n'
而不是endl
,因为endl
强制流刷新每一行。 - Inversefile<<endl;
这会强制刷新文件缓冲区到磁盘上。让缓冲区在满时自行刷新。(注意:缓冲区的设计大小是为了在您的操作系统上高效运行(因此让它自己完成任务))。替换为file << "\n";
这将有效地减少写入次数,并以更大的块进行写入(瓶颈可能是写入块的数量而不是字节数,因此尽可能使块更大)。 - Martin York