Roc*_*cky 10 c# performance file
我有.txt文件(包含超过百万行),大约1GB,我有一个字符串列表,我试图删除字符串列表中存在的文件中的所有行并创建新文件,但它正在采取很长时间.
using (StreamReader reader = new StreamReader(_inputFileName))
{
using (StreamWriter writer = new StreamWriter(_outputFileName))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (!_lstLineToRemove.Contains(line))
writer.WriteLine(line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何提高代码的性能?
通过使用 PLINQ 并行完成工作,您可能会获得一些加速,而且从列表切换到哈希集也会大大加快检查速度Contains(。HashSet对于只读操作来说是线程安全的。
private HashSet<string> _hshLineToRemove;
void ProcessFiles()
{
var inputLines = File.ReadLines(_inputFileName);
var filteredInputLines = inputLines.AsParallel().AsOrdered().Where(line => !_hshLineToRemove.Contains(line));
File.WriteAllLines(_outputFileName, filteredInputLines);
}
Run Code Online (Sandbox Code Playgroud)
如果输出文件与输入文件的顺序相同并不重要,您可以删除它.AsOrdered()并获得一些额外的速度。
除此之外,您实际上只是受 I/O 限制,使其更快的唯一方法是获得更快的驱动器来运行它。