我编写了一个将txt文件拆分成小块的程序 但我的问题是我的方法很慢 因为这个文件大小是1gb,我使用一个名为“pagesize”的变量,它将根据分割文件中的行数计算
问题是foreach很慢?
有更好的方法吗?
private void button1_Click(object sender, EventArgs e)
{
string inputFile = @"G:\Programming\C#\c# tamrin reza\large-Orders.txt";
int seed = 1000;
const int pageSize = 5000;
int count = 1;
const string destinationFileName = @"F:\Output\";
string outputFile;
string baseName = "-CustomerApp";
string extension = Path.GetExtension(inputFile);
var lst = new List<string>();
//FileInfo fileInfo = new FileInfo(inputFile);
//long fileSize = fileInfo.Length / pageSize;
FileStream fs = new FileStream(inputFile, FileMode.Open);
StreamReader sr = new StreamReader(fs);
while (!sr.EndOfStream)
{
for (int j = 1; j <= pageSize; j++)
{
var line = sr.ReadLine();
lst.Add(line);
}
outputFile = destinationFileName + count + baseName + extension;
CopyLines(lst, outputFile);
lst.Clear();
count++;
}
}
private void CopyLines(List<string> line, string outputFile)
{
FileStream outputFileStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
//StreamWriter writer = new StreamWriter(outputFile);
//for (int i = 1; i < line.Count; i++)
//{
//}
using (StreamWriter sw = new StreamWriter(outputFileStream))
{
foreach (var li in line)
{
sw.WriteLine(li);
}
}
}
由于
答案 0 :(得分:1)
您正在迭代整个集合两次。如果您在阅读时写入输出文件,那么将在整个集合中保存一次迭代。
while (!sr.EndOfStream)
{
outputFile = destinationFileName + count + baseName + extension;
FileStream outputFileStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(outputFileStream))
{
for (int j = 1; j <= pageSize; j++)
{
var line = sr.ReadLine();
sw.WriteLine(li);
}
}
lst.Clear();
count++;
}