对几千万的TXT文本数据进行去重处理,查找其中重复的数据,并移除。尝试了各种方法,下属方法是目前尝试到最快的方法。以下代码将重复和不重复数据进行分文件存放,提升效率的关键是用到了HashSet。
TextReader reader = File.OpenText(m_dataFilePath);
string[] files = new string[2];
files[0] = ROOT_DIR + "不重复数据.txt";
files[1] = ROOT_DIR + "重复数据.txt";
TextWriter writer1 = File.CreateText(files[0]);
TextWriter writer2 = File.CreateText(files[1]);
string currentLine;
int idx = 0;
HashSet<string> previousLines = new HashSet<string>(new MyEqualityComparer());
while ((currentLine = reader.ReadLine()) != null)
{
if ((++idx % 10000) == 0)
UpdateInfo("正在比对第 " + idx + " 条数据…");
currentLine = currentLine.TrimEnd();
if (previousLines.Add(currentLine))
{
writer1.WriteLine(currentLine);
}
else
{
if(m_allSave)
writer2.WriteLine(currentLine);
}
}
reader.Close();
writer1.Close();
writer2.Close();
reader.Dispose();
writer1.Dispose();
writer2.Dispose();
1000万数据的处理时间也就是转瞬之间,试试看?
# 1 楼:
while ((currentLine = reader.ReadLine()) != null)
这个不是一行一行读取吗,就算不处理里面的逻辑代码 ,光循环完这个都不可能瞬间啊,你这个1000W得循环到猴年马月啊。不知是否有更高效的读取txt的每一行?
像Navicat for SQLite导入txt数据时的处理就相当快瞬间处理完成。
不知道有哪位大神指导如何秒处理记事本的每一样
转载请注明原文地址: https://ju.6miu.com/read-1739.html