Чтение и анализ файлов в .NET - производительность для найма - PullRequest
3 голосов
/ 29 октября 2008

Я хочу наиболее эффективный способ чтения и анализа файла.

Можно ли прочитать файл в .NET, но не загрузить весь файл в память? т.е. просто загружать файл построчно, когда я анализирую содержимое каждой строки?

Загружает ли XmlTextReader весь файл в память или передает поток в память во время чтения файла?

Ответы [ 7 ]

10 голосов
/ 29 октября 2008

Вы можете использовать метод ReadLine класса StreamReader:

string line;

// Read the file and display it line by line.
System.IO.StreamReader file = 
   new System.IO.StreamReader("c:\\test.txt");

while((line = file.ReadLine()) != null)
{
   Console.WriteLine (line);
}

file.Close();

Для файлов XML я бы пошел с XMLTextReader. Смотрите эту статью в журнале доктора Добба :

" Синтаксический анализ XML-файлов в .NET с использованием C #: В .NET доступны пять различных методов синтаксического анализа, каждый из которых имеет свои преимущества"

1 голос
/ 31 октября 2008

вот класс TextFileReader, который я использовал в течение многих лет

http://www.dotnet2themax.com/ShowContent.aspx?ID=4ee44d6c-79a9-466d-ab47-56bba526534f

1 голос
/ 29 октября 2008

XmlTextReader работает в потоке - поэтому он не читает весь файл в памяти.

0 голосов
/ 29 октября 2008

XmlTextReader не загружает весь файл в память, он работает в потоке.

Все объекты файлового потока читают файл в «чанках». Вы можете указать, какой объем данных (т. Е. Насколько большой чанк) будет возвращаться в вашу программу с каждым вызовом (т. Е. M байтов, где m - любое целое число, возможно, длинное значение, или с помощью текстового ридера, одной строки произвольной длины. ) По соображениям производительности ОС будет кэшировать n байтов (где n равно 0 или все) за чтение. У вас нет абсолютно никакого контроля над размером n, и вы просто расстроитесь, экспериментируя, чтобы выяснить, что это такое, поскольку оно меняется из-за тысячи различных факторов окружающей среды.

0 голосов
/ 29 октября 2008

Я тоже не уверен насчет XMLTextReader, но вы можете читать построчно, как это:

Dim theLine as String
Dim fsFile As New FileStream(inputFile, FileMode.Open)   'File Stream for the Input File
Dim fsImport As New FileStream(outputFile, FileMode.OpenOrCreate)  'File Stream for the Output File
Dim srFile As New StreamReader(fsFile)  'Stream Reader for Input File
Dim swfile As New StreamWriter(fsImport)   'Stream Writer for Output File

Do While srFile.Peek <> -1              'Do While it's not the last line of the file
    theLine = srFile.ReadLine           'Read the line
    Messagebox.Show(theLine, "Line-by-Line!")
Loop
0 голосов
/ 29 октября 2008

Вы можете попробовать использовать функцию StreamReader.ReadLine и проверить производительность по сравнению с такими вещами, как FileStream / TextReader.

0 голосов
/ 29 октября 2008

Я не уверен насчет XMLTextReader, но вы можете читать файл построчно, используя объекты FileReader. )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...