哪种在.NET中读取大型csv文件的性能最高? 使用FileStream?还是另一课? 谢谢!
答案 0 :(得分:3)
您可以使用StreamReader
返回的FileInfo.OpenText
:
Dim file As New FileInfo("path\to\file")
Using reader As StreamReader = file.OpenText()
While Not reader.EndOfStream
Dim nextLine As String = reader.ReadLine()
ProcessCsvLine(nextLine)
End While
End Using
答案 1 :(得分:1)
如果你想将它全部读入内存,一个简单的File.ReadAllText()
就可以了。
编辑:如果您的文件确实非常大,那么您可以使用StreamReader
类,有关详细信息,请参阅here。这种方法有时是不可避免的,但出于风格原因应该大多避免。有关更深入的讨论,请参阅here。
答案 2 :(得分:1)
最有效的方法是利用LINQ中的deffered执行。您可以创建一个简单的Linq-To-Text函数,一次读取一行,处理它然后继续。这非常有用,因为文件非常大。
我会停止使用StreamReader类的ReadBlock或ReadBlock或ReadToEnd方法,因为它们倾向于一次读取多行或甚至读取文件中的整行。与一次读取一行相比,最终消耗的内存更多。
public static IEnumerable<string> Lines(this StreamReader source)
{
String line;
if (source == null)
throw new ArgumentNullException("source");
while ((line = source.ReadLine()) != null)
{
yield return line;
}
}
请注意,该函数是StreamReader类的扩展方法。这意味着它可以按如下方式使用:
class Program
{
static void Main(string[] args)
{
using(StreamReader streamReader = new StreamReader("TextFile.txt"))
{
var tokens = from line in streamReader.Lines()
let items = line.Split(',')
select String.Format("{0}{1}{2}",
items[1].PadRight(16),
items[2].PadRight(16),
items[3].PadRight(16));
}
}
}
答案 3 :(得分:1)
我对这个图书馆有很好的经验:
答案 4 :(得分:0)