@ Крис, прости. Это цитата MSDN Microsoft
Методология
В этом эксперименте будут сравниваться два класса. Классы StreamReader
и FileStream
будут направлены на чтение двух файлов по 10K и 200K в полном объеме из каталога приложения.
StreamReader (VB.NET)
sr = New StreamReader(strFileName)
Do
line = sr.ReadLine()
Loop Until line Is Nothing
sr.Close()
FileStream (VB.NET)
Dim fs As FileStream
Dim temp As UTF8Encoding = New UTF8Encoding(True)
Dim b(1024) As Byte
fs = File.OpenRead(strFileName)
Do While fs.Read(b, 0, b.Length) > 0
temp.GetString(b, 0, b.Length)
Loop
fs.Close()
Результат
FileStream
явно быстрее в этом тесте. StreamReader
требуется на 50% больше времени для чтения маленького файла. Для большого файла это заняло дополнительно 27% времени.
StreamReader
специально ищет разрывы строк, а FileStream
- нет. Это будет учитывать дополнительное время.
Рекомендации
В зависимости от того, что приложение должно делать с разделом данных, может потребоваться дополнительный анализ, который потребует дополнительного времени обработки. Рассмотрим сценарий, в котором в файле есть столбцы данных, а строки CR/LF
разделены. StreamReader
будет обрабатывать строку текста в поисках CR/LF
, а затем приложение будет выполнять дополнительный анализ в поисках определенного местоположения данных. (Вы думали, что String. SubString поставляется без цены?)
С другой стороны, FileStream
считывает данные порциями, и активный разработчик может написать немного больше логики, чтобы использовать поток для своей выгоды. Если необходимые данные находятся в определенных позициях в файле, это, безусловно, путь, так как он уменьшает использование памяти.
FileStream
- лучший механизм для скорости, но потребует больше логики.