当我们需要创建大于10 MB的文本文件时,建议采用哪种方法来获得最佳性能?
代码中有多个部分需要将内容写入单个文件。这意味着很多文本行。
选项#1(此逻辑将多次调用):
选项#2:
选项#3:还有其他吗?
请记住输出文件可能大于10 MB。
答案 0 :(得分:15)
打开一个编写器比重复打开和关闭它更有效。但是,如果这是关键数据,则应在每次写入后调用Flush()
以确保它到达磁盘。
你的程序是多线程的吗?如果是这样,你可能希望有一个生产者/消费者队列 - 让一个线程获取要从队列中写入的项目并写入它们,然后其他线程可以自由地将项目放在队列中。
你确定你确实遇到了性能问题吗?这些天10MB非常小......在我的上网本上,写入10MB仍然只需要一两秒左右(不,这不是固态驱动器)。
答案 1 :(得分:0)
使用StringBuilder连接文本,只在文件中打开和写入一次。
答案 2 :(得分:0)
在方案1和2中,您必须问自己是否需要同时访问该文件。在这种情况下,在场景2中,StreamWriter不是一个选项,因为它不是同步的。在方案1中,您应该打开每个StreamWriter,使其获得对文件的独占锁定。
假设顺序访问,我永远不会使用方案2.它需要将StreamWriter传递给需要它的每个代码段。谁负责再次关闭作家。这很快就会变得无法维持。
场景1的缺点是您必须在任何需要的地方打开StreamWriter,这也会变得无法维护。此外,现在您必须知道每个代码部分中文件的位置。
我会在StreamWriter周围找一个单独的包装器,这样你就可以在任何你喜欢的地方使用它,而不会在StreamWriter本身上产生很多依赖。
答案 3 :(得分:0)
只需混合两种方法......使用一个缓冲区,只允许您在内存中存储多少内容。一旦超过该大小,您的缓冲区将被写入磁盘并清理。