C# 修剪所有文件中文本的最快方法
我有一个功能来修剪目录中所有文件中的所有文本。这是密码C# 修剪所有文件中文本的最快方法,c#,C#,我有一个功能来修剪目录中所有文件中的所有文本。这是密码 var dbtables = System.IO.Directory.GetFiles(db); foreach(var table in dbtables) { string text = File.ReadAllText(table); File.WriteAllText(table, text.Trim()); } 此目录中有许多大文件,大约需要30分钟才能完成。您知道一种更快的方法吗?您的代码目前会从整个文件
var dbtables = System.IO.Directory.GetFiles(db);
foreach(var table in dbtables)
{
string text = File.ReadAllText(table);
File.WriteAllText(table, text.Trim());
}
此目录中有许多大文件,大约需要30分钟才能完成。您知道一种更快的方法吗?您的代码目前会从整个文件的开头和结尾而不是每一行修剪空白。如果要按行修剪空白,可以使用:
var dbtables = System.IO.Directory.GetFiles(db);
foreach (string table in dbtables)
{
string temp = table + ".tmp";
using (StreamWriter target = new StreamWriter(temp))
foreach (string line in File.ReadLines(table))
target.WriteLine(line.Trim());
File.Delete(table);
File.Move(temp, table);
}
以下是我建议对每个文件执行的操作:
这可能比您的代码更受驱动器I/O的限制……我非常怀疑有没有更快的方法来实现这一点。为了修剪,您必须读写文件,那么您还打算如何提高性能?此外,@vcsjones也提出了一个很好的观点。获取SSD:)您应该运行一个探查器,看看时间花在哪里。这很可能发生在磁盘I/O中,不过您可以通过自己修剪文件来减少调用
Trim()
所花费的时间Trim()
将创建一个非常大的字符串的新副本,因此保存该副本可以节省一些时间。但是请先分析一下。我想你最大的问题是你总是在写磁盘,即使Trim
没有改变任何东西。您可以比较Trim
的前后,看看保存文件是否有意义。grep()
是最快的。你为什么想要一个C语言的程序?你是否比较了使用正则表达式和C#
的时间?如何修剪每一行并不是他的问题。老实说,我想展示一下使用惰性枚举方法的好处,比如ReadLines
,而不是将整个文件读入内存,比如OP的ReadAllText
。但后来我意识到,如果事先没有读取文件,就不可能实现TrimEnd
部分。