|
|
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Текстовый файл 11 млн строк, обрабатывается минут 15. Как найти узкое место? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 10:35 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Я бы попробовал StringBuffer - append вместо += для склеивания строк. Не думаю, что радикально, но хоть немного поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 10:46 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 10:48 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Hett, можно попробовать распараллелить типа disruptora ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 10:53 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЯ бы попробовал StringBuffer - append вместо += для склеивания строк. Не думаю, что радикально, но хоть немного поможет... У меня был опыт,правда не на андроиде а на большой java... StringBuffer именно радикально решила проблему с производительностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 10:58 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Hett, регулярные выражения стоят относительно дорого, я бы попробовал написать код без нид них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 12:30 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
А вообще для поиска узких мест нужно пользоваться профайлером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 12:32 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
just_vladimirА вообще для поиска узких мест нужно пользоваться профайлером. Уже есть бухтелка в адрес профайлера. От Романа Елизарова. Вот нагуглю - приаттачу. Профайлер нужен когда у вас есть очень много кода и вы ничего не знаете о метриках отклика. В данном примере System.nanoTime() будет точнее и юзабельнее. Есть точка входа и точка выхода и 1 цикл с циклическим исполнением .matcher() который может и является основным тормозом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 13:57 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
у него матчер выключается после первого мача и включается снова после встречи class_end. это наводит на мысль, что большую часть времени мачер выключен и проблема не в нем, хотя конечно зависит от данных помимо StringBuilder можно предложить вместо s.equals("class_end") сначала сравнивать hashcode, и только потом equals и еще, тут readline - довольно слабое место, в нем тоже есть копирование. Большие файлы лучше так не обрабатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 14:19 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
автору него матчер выключается после первого мача и включается снова после встречи class_end. это наводит на мысль, что большую часть времени мачер выключен и проблема не в нем, хотя конечно зависит от данных Именно так. Всего там 12 тыс классов примерно идут друг за другом, так что матчер срабатывает относительно редко. А нельзя какой-то профайл посмотреть, какая строчка сколько выполнялась суммарно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 15:03 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: 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. Теперь секунд за 7 выполняется. Все таки узким местом была конкатенация строк :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 15:57 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Так больше нечему было. А там с конкатенацией - неявное создание и освобождение объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2016, 16:37 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
HettТекстовый файл 11 млн строк, обрабатывается минут 15. HettСделал так: ... Теперь секунд за 7 выполняется. Хренасе разница! о_О Простите меня за мой французский :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 17:57 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
А может быть такое, что файл закэшировался на уровне ОС ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 19:40 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
UsmanА может быть такое, что файл закэшировался на уровне ОС ? не, это реальная разница ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 23:16 |
|
||
|
Медленный код, как найти узкое место?
|
|||
|---|---|---|---|
|
#18+
Подозреваю, что у него currentClassData вырастает до мегабайтов и/или десяток-сотен мегабайт. А он его на каждой итерации туда-сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 10:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39206558&tid=2124194]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
90ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 469ms |

| 0 / 0 |
