Я обрабатываю несколько текстовых файлов построчно, используя BufferReader.readlLine ()
.
Два файла одинакового размера 130 МБ, но обработка одного занимает 40 секунд в то время как другой занимает 75 секунд
Я заметил, что один файл содержит 1,8 миллиона строк, а другой - 2,1 миллиона. Но когда я попытался обработать файл с 3,0 миллионами строк одинакового размера, мне потребовалось 30 минут для обработки.
Итак, мой вопрос:
Это поведение из-за времени поиска читателя буфера (я хочу знать, как BufferedReader
работает или анализирует файл построчно?)
Есть ли способ, которым я могу прочитать файл построчно быстрее?
Хорошо, друзья, я представляю некоторые подробности.
Я разделяю строку на три части с помощью регулярного выражения, а затем использую SimpleUnsortedWriter
(предоставленный Cassandra). Я записываю ее в какой-то файл как ключ, столбец и значение. После обработки данных размером 16 МБ они сбрасываются на диск.
Но логика обработки одинакова для всех файлов, даже один файл размером 330 МБ, но меньше строк около 1 миллиона обрабатывается за 30 секунд. В чем может быть причина?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
Изменили -Xmx256M на -Xmx 1024M
, но это все равно не помогает.
Обновление: По моим наблюдениям, когда я записываю в буфер ( в физической памяти), поскольку нет. количество записей в буфер увеличивается, новые записи требуют времени. (Это мое предположение)
Пожалуйста, ответьте.