Обычно я использую метод, описанный в csv parser, для чтения файлов электронных таблиц. Однако при чтении 64-мегабайтного файла, который содержит около 40 столбцов и 250 тыс. Строк данных, это занимает около 4 минут. В исходном методе класс CSVRow используется для чтения файла по строкам, а частный вектор используется для хранения всех данных в строке.эффективно читает файл больших таблиц в C++
Несколько вещей отметить:
- я сделал резервную достаточную емкость вектора, но не очень полезно.
- Мне также нужно создавать экземпляры некоторого класса при чтении каждой строки, но даже когда код просто читается в данных без создания каких-либо экземпляров, это занимает много времени.
- Файл разделен на табу вместо запятой, но я не думаю, что это имеет значение.
Поскольку некоторые столбцы в этом файле не являются полезными данными, я изменил метод, чтобы иметь частный член строки для хранения всех данных, а затем найти позицию (n-1) -го и n-го разделителей для получить полезные данные (конечно, есть много полезных столбцов). Поступая таким образом, я избегаю некоторых операций push_back и сокращаю время до чуть более 2 минут. Однако это все еще кажется слишком длинным для меня.
Вот мои вопросы:
Есть ли способ, чтобы более эффективно прочитать такой файл с таблиц?
Должен ли я считать файл в буфере вместо строки за строкой? Если да, то как читать по буфере и использовать класс csvrow ?
- Я не пробовал повышать токенизатор, это , что более эффективно?
Благодарим за помощь!
Тяжелый куча хлеба. Читайте это: http://blogs.msdn.com/b/ricom/archive/2005/05/10/performance-quiz-6-chinese-english-dictionary-reader.aspx?wa=wsignin1.0 –