Обрабатывать плоские файлы - PullRequest
0 голосов
/ 08 февраля 2012

Мой сервис получает большие плоские текстовые файлы (40 МБ) от многих клиентов (может варьироваться от 1 до 30 клиентов в минуту) Каждая строка должна быть преобразована в сущность, если нет ошибок в формате данных или данных. В строке нет разделителя, каждая строка разделена на фиксированную длину подстроки, поэтому каждая подстрока будет полем сущности. поэтому мой вопрос заключается в том, как быстро проанализировать огромные плоские TXT-файлы в массиве сущностей?

Сервис разработан на C # 4.0. Но алгоритм может быть разработан на другом языке, если он может иметь слабую производительность в C #

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Здесь есть пара решающих факторов. Если бы у меня было конечное состояние в базе данных или XML, я бы, вероятно, использовал MapForce FlexText от Altova для создания того, что выглядит как простое отображение. Это также должно быть относительно быстрым.

Если бы мне сначала нужно было разобрать классы для обработки, я бы, вероятно, использовал простой StreamReader и разбирал его построчно.

  using (StreamReader sr = new StreamReader(filePath)) 
  {
      string line;

      while ((line = sr.ReadLine()) != null) 
      {
          ProcessLine(line);
      }
  }
1 голос
/ 08 февраля 2012

Я только что написал быстрый тест, в котором было создано и выгружено 0,5 миллиона объектов с 8 свойствами в текстовый файл (по 1 на строку). Я дополнил их до фиксированной длины и преобразовал значения int в строку, где это необходимо. Полученные строки составили файл размером 50 МБ.

Чтение этого и создание экземпляров объектов, анализ int и т. Д. Заняли около 3 секунд на моем ПК (без использования высоких счетчиков производительности).

Я использовал потоковый ридер, как и предложил Джейкоб, но я думаю, что в конечном счете многое из этого будет зависеть от вашего оборудования, сложности проверок на ошибки, количества строк и того, что вы хотите делать с объектами, как только вы иметь их.

Не уверен, поможет ли это!

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