choice of implementation to read lines of file - c#
The files at max could be 1GB
came across these 2 reads
IEnumerable
and
How to: Read Text from a File
Which one is better开发者_StackOverflow社区 in terms of efficiency - memory/cpu
Also, where can i read up on what stream reader implements under the hood??
Neither - if you're using .NET 4, use File.ReadLines
.
If you're using .NET 3.5 or earlier, you can write this yourself more easily than the VB page showed, as VB doesn't have iterator blocks yet (it's getting them in the next version, and in a more flexible way than in C#):
// Optional: create an overload of this taking an encoding
public IEnumerable<string> ReadLines(string file)
{
using (TextReader reader = File.OpenText(file))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
This is effectively what File.ReadLines
does for you anyway.
Then you can use:
foreach (string line in ReadLines("file.txt"))
{
// Use a line at a time
}
No more than a line or so (the size of the buffer) will be in memory at a time, and it'll be reasonably CPU-efficient too.
All of these will use StreamReader
under the hood, which is right and proper as it's the canonical way of converting a stream of binary data to a TextReader
. Basically it reads binary data from a Stream
and uses an Encoding
to convert that data into text as and when it's requested. What more do you need to know?
精彩评论