【发布时间】:2012-06-07 17:36:10
【问题描述】:
我想知道一些事情,我有一个循环运行一整天(7 次),然后在其中运行另一个循环,它针对文件中的所有记录运行。 (大约 100000),所以总共大约 700000 次,现在我想记录每个循环中的每个处理,并将其记录到文件中,假设我们第一次在第一个循环内,第一次在第二个循环内,我们每次都记录在一个文件中做了什么。但问题是,如果我每次都记录,会严重影响性能,因为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 的评论相比,给我任何性能提升?
【问题讨论】:
-
您是否正在寻找一个 StringBuilder 来附加所有日志记录,然后在循环记录 stringbuilder.ToString() 之后添加
-
@JeremyThompson 我也立即想到了 StringBuilder,但由于
File有一个方法AppendAllLines,结果证明简单地拥有一个字符串列表更有效,每个字符串都是一个日志.
标签: c# performance logging loops io