Низкая производительность с BufferedReader

Я обрабатываю несколько текстовых файлов построчно, используя BufferReader.readlLine () .

Два файла одинакового размера 130 МБ, но обработка одного занимает 40 секунд в то время как другой занимает 75 секунд

Я заметил, что один файл содержит 1,8 миллиона строк, а другой - 2,1 миллиона. Но когда я попытался обработать файл с 3,0 миллионами строк одинакового размера, мне потребовалось 30 минут для обработки.

Итак, мой вопрос:

  1. Это поведение из-за времени поиска читателя буфера (я хочу знать, как BufferedReader работает или анализирует файл построчно?)

  2. Есть ли способ, которым я могу прочитать файл построчно быстрее?

Хорошо, друзья, я представляю некоторые подробности.

Я разделяю строку на три части с помощью регулярного выражения, а затем использую 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 , но это все равно не помогает.

Обновление: По моим наблюдениям, когда я записываю в буфер ( в физической памяти), поскольку нет. количество записей в буфер увеличивается, новые записи требуют времени. (Это мое предположение)

Пожалуйста, ответьте.

6
задан bluish 7 March 2012 в 10:08
поделиться