我已经写了一个程序来清理我几个月来收集的一些财务数据。它总共大约100 2GB,并且每天都在增长,每个文件大约1-2 2GB。它目前以文本文件格式存储。
下面的代码用于清理数据:
static void Main()
{
string inputString;
string outputString;
// others variable omitted
string[] lineSplit;
foreach (string fullPath in Directory.GetFiles(inputDirectory))
{
using (StreamReader reader = new StreamReader(fullPath)) //read from input file
{
while ((line = reader.ReadLine()) != null)
{
//logic to clean data
...
///////////////////////////////////////////////////////////
using (StreamWriter writer = File.AppendText(outputFile))
{
writer.WriteLine(outputString);
}
}
}
}
}
它非常慢,我估计对于100 to的数据,我大约需要3-4天才能完成它。我知道这是关于我的IO操作,因为我没有缓冲区等来做它。我对C#还是比较陌生的,我找不到任何相关的例子来为IO构建合适的缓冲区。我发现的大多数示例都是用于下载的,不适用于阅读文本文件。我无法将整个文件加载到内存中进行处理,因为它太大了。我该怎么做呢?有人能给我一些我可以使用的代码片段吗?谢谢
发布于 2012-08-13 14:13:03
您将在每一行上重新打开输出文件。将循环移到通过调用File.AppendText
开始的块内部
using (TextReader reader = File.OpenText(fullPath))
{
using (TextWriter writer = File.AppendText(outputFile))
{
while ((line = reader.ReadLine()) != null)
{
// Logic to clean data
writer.WriteLine(outputString);
}
}
}
当然,这里假设每个输入文件都有一个输出文件。如果不是这样的话-如果每一行都可以转到一个小集合中的不同文件-你可能想让所有的输出文件保持打开,只保留一个字典(或类似的东西),这样你就可以快速地写你想写的任何文件。
https://stackoverflow.com/questions/11928971
复制相似问题