|
|
|
Чтение 10 млн коротких строк (int-чисел) из файла. Как понять результаты профайлинга ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczozzmosis, fr.readLine() не используйте вообще. Используйте fr.read(buffer...) где buffer это char[], тогда у вас не будет каждый раз создаваться строка, а будет каждый раз наполнятся один и тот же массив. Если вы что-то парсите, то не понятно, почему не взять готовые библиотеки.Теперь осталось понять, как юзать BufferedReader вкупе с char[], чтобы читать строки, разделенные символами перевода строки, каждый раз в один и тот же char[]. Но поскольку у мну обработка больших чисел, надо этот chr[]-массив после считывания в него символов как-то обработать, чтобы его смог съесть конструктор BigDecimal. Код: java 1. 2. 3. 4. 5. Что следует делать / вызвать там, внутри цикла ? Он же считывает каждый байт, в том числе переводы строк. Надо как-то "эмулировать" readline(), чтобы при чтении ограничивался каждый раз символом CR/LF. Попробовал велосипед сделать, получилась неработающая туфта: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Результат: run: Код: plaintext 1. 2. 3. 4. 5. 6. Обламывается, видимо, на том, что в buf[] после цифр идут пробелы. Велосипед изобретать глупо. Подскажите, плз - есть какие-то готовые решения для этого ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 21:48:24 |
|
||
|
Чтение 10 млн коротких строк (int-чисел) из файла. Как понять результаты профайлинга ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisBlazkowiczozzmosis, fr.readLine() не используйте вообще. Используйте fr.read(buffer...) где buffer это char[], тогда у вас не будет каждый раз создаваться строка, а будет каждый раз наполнятся один и тот же массив. Если вы что-то парсите, то не понятно, почему не взять готовые библиотеки.Обламывается, видимо, на том, что в buf[] после цифр идут пробелы. Велосипед изобретать глупо. Подскажите, плз - есть какие-то готовые решения для этого ?Ошибку победил, но судя по всему -коряво вышло :( Нету выигрыша (я всё про объем памяти в профайлере). Итак, два варианта чтения файла с BigInteger-числами, определения их простоты и укладывания по возрастанию в TreeSet (чтобы долго не ждать, ограничил чтение первыми 100 тыс сроками): 1. via StringTokenizer: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 2. via BufferedReader + char[] + char[]: // да, ДВА char[]-массива Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Оба варианта работают одинаково: на моей машине 14 сек. И потребление памяти в обоих вариантах одинаковое - см скриншот. И где тогда профит при отказе от readLine() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 01:36:39 |
|
||
|
Чтение 10 млн коротких строк (int-чисел) из файла. Как понять результаты профайлинга ?
|
|||
|---|---|---|---|
|
#18+
Сколько этот? LoadBigInteger Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 01:03:41 |
|
||
|
Чтение 10 млн коротких строк (int-чисел) из файла. Как понять результаты профайлинга ?
|
|||
|---|---|---|---|
|
#18+
У этого файла такое жесткое форматирование что его можно считать двоичным типизированным. Можно читать блоками по 14 CHARS и будет ОК. И диапазон long не превышает. Тут даже BitIneger не нужно использовать. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 02:21:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38231708&tid=2129484]: |
0ms |
get settings: |
16ms |
get forum list: |
19ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
54ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
74ms |
get tp. blocked users: |
3ms |
| others: | 281ms |
| total: | 482ms |

| 0 / 0 |
