记录到内存然后写入文件

我想知道一些事情,我有这个循环运行了所有的日子(7次),然后在其中的另一个循环,运行文件中的所有记录。 (大约100000),所以总共约70万次,现在我想记录每个循环中的每个处理,并将其记录到文件中,假设我们第一次进入第一次循环,第一次进入第二次循环,我们每次记录,在文件中完成的操作。 但问题是,如果我每次都要记录,那么性能会受到极大的影响,因为有太多的IO操作,我在想的是有什么办法,我可以将每一步记录到内存中(内存流)或者任何东西)然后在外部循环结束时,将所有内存流数据记录到文件中?

如果我有话

for (int i=0; i<7; i++) { for (int j=0; j<RecordsCount; j++) { SomeOperation(); // I am logging to a file here right now } } 

它严重损害了性能,如果删除日志文件,我可以提前完成它。 所以我认为首先登录到内存并将所有日志从内存写入文件会更好。 那么,有没有办法做到这一点? 如果有很多,最好的是什么?

ps:这是一个记录器,我发现http://www.codeproject.com/Articles/23424/TracerX-Logger-and-Viewer-for-NET ,但我可以使用任何其他自定义记录器或其他任何需要的东西。

编辑:如果我使用内存流,然后将其全部写入文件,那么这会给我提供更好的性能,然后使用File.AppendAllLines如Yorye和zmbq的回答中所建议的那样,这是否会让我在Jeremy评论中获得任何性能提升?

为什么不使用正确的日志框架而不是自己编写?

例如NLog内置了缓冲,配置简单: https : //github.com/nlog/NLog/wiki/BufferingWrapper-target

我建议你专注于编写代码,为你的项目提供价值,同时重用现有的解决方案来解决所有其他问题。 这可能会让你更有效率,并给出更好的结果:-)

这只是一个例子,但你可以得到这个想法。

你真的有解决方案,你只需要这样做……

 for (int i=0; i<7; i++) { var entries = new List(); for (int j=0; j 

只要有足够的缓冲区,将700,000行记录到文件中就不会花费很长时间。 事实上,如果你在循环中执行它不应该花费更长的时间,而不是在循环外执行它。

不要使用File.AppendAllLines或类似的东西,而是打开文件流,确保你有一个缓冲区,并通过它写。