File io 哪个更好?继续写入文件或创建StringBuilder对象并写入文件?

File io 哪个更好?继续写入文件或创建StringBuilder对象并写入文件?,file-io,stringbuilder,File Io,Stringbuilder,我已经编写了一个应用程序,它可以提取excel数据并从中创建SQL CREATE和INSERT语句。现在,我正在使用一个StringBuilder,在读取和提取数据后,我不断地在其中添加语句,最后将其写入文件。另一种选择是在读取时继续写入文件,但由于写入光盘的操作太多,成本会很高。因此,我想知道我的思维方法是否正确,是否应该继续使用StringBuilder写入文件?这两种方法都没有错,但我会使用这两种方法的混合。写块大小取决于数据的重要性。如果它是不容易恢复并且很重要的东西,那么您需要编写更小

我已经编写了一个应用程序,它可以提取excel数据并从中创建SQL CREATE和INSERT语句。现在,我正在使用一个StringBuilder,在读取和提取数据后,我不断地在其中添加语句,最后将其写入文件。另一种选择是在读取时继续写入文件,但由于写入光盘的操作太多,成本会很高。因此,我想知道我的思维方法是否正确,是否应该继续使用StringBuilder写入文件?

这两种方法都没有错,但我会使用这两种方法的混合。写块大小取决于数据的重要性。如果它是不容易恢复并且很重要的东西,那么您需要编写更小的块。如果不太重要并且可以轻松恢复,请使用较大的块大小。

您应该继续使用
StringBuilder
。我最近尝试过类似的应用程序,在每次生成语句后写入文件的速度都非常慢

当然,如果您有大量语句(我会说>100k,但这取决于每个语句的大小),您可能希望在每个X语句之后将
StringBuilder
转储到一个文件中,以避免使用太多内存。X将取决于每个SQL语句的大小


顺便说一句,您没有指定您使用的数据库,但是如果您使用的是MySQL,您应该创建一个INSERT语句来插入多行。对于每一行,它的工作速度比单个语句快得多(例如-
插入表名值(x1,y1,z1),(x2,y2,z2),…,(xn,yn,zn);

谢谢你,亚历克斯。我认为大小和重要性也是一个重要的考虑因素。很好的建议谢谢Eran的建议。我正在使用derby数据库。你指出了一件好事。我必须检查它是否为每一行接受一条语句。如果是这样的话,我会做出相应的改变。我认为这并不意味着
StringBuilder
始终是最好的方法。例如,您可能希望在每次操作中写入缓冲区不止一次,以避免内存膨胀,或避免耗尽消耗输出的任何东西(尽管后者在这里可能不适用)。@RJFalconer这是一个很好的观点。OP没有说明我们讨论了多少条语句,如果这个数字非常高,那么限制StringBuilder的大小并将其刷新到磁盘上是有意义的。我更新了答案,大概有10张表,最多1000条语句,但不超过10条@RJFalconer我理解你的观点,如果它将是一个巨大的文件,我应该保留里程碑,然后再写它,避免缓存过度使用。您所说的每次操作一次是什么意思?@VivinRaj这是一小部分语句,因此假设单个语句的大小不太大,您可以在单个StringBuilder中收集所有语句,并在最后将它们转储到文件中。