|
|
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть текст среднего размера, его надо разбить на слова и вывести затем эти слова в обратном порядке в новый файл. То есть, для входного файла с таким содержимым: Код: java 1. 2. 3. 4. 5. 6. 7. - надо получить на выходе: Код: java 1. 2. 3. 4. 5. 6. 7. Исходный файл небольшой: размер около 8 Мегов, содержит 149 тыс слов (язык - английский). Полазив в интернетах, сделал следующий класс: Код: 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. 45. 46. 47. 48. 49. Однако расход памяти в пиковый момент достигает 117 мегов (для всего 8 мегов исходного текста). Покритикуйте, плз, код: я вообще в ту степь полез или надо медитировать над другими способами ? Как уменьшить расход памяти ? Сам текстовый файл тут: http://yadi.sk/d/5UsjXzJ-3VcUs Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 18:36:34 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 20:55:39 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Два момента: 1. У StringBuilder есть метод insert 2. StringBuilder вам не нужен. Начните с просто ArrayList и при считывание файла заполняйте его в обычном порядке. А вот уже при сохранение в файл делайте обход в обратном порядке. После заполнения arraylist вызовите list.trimToSize(), если вам важно съэкономить память. Этот метод есть только у ArrayList, т.е. переменная должна быть именно этого типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 20:59:47 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Usman, Leonidv - спасибо за ответы. Только не взлетело :( Вот два варианта через ArrayList, оба в пиковый момент всё равно жрут 120 мегов: variant-1 : шустрый, 4.5 сек вместо прежних 7.5 Код: 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. 45. 46. 47. 48. Output: Код: plaintext 1. 2. variant-2 (от Usman, чуток только подпиленный) Код: 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. Этот вариант медленнее первоначального: Код: plaintext 1. Но самая печалька в том, что все три варианта (первый и эти два) жрут одинаково: около 120 мегов (в аттаче - картинка при запуске var_1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 22:16:36 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Это случайно не с T system задание? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 22:25:47 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Подключите профайлер (visualvm, например) и через него смотрите, что происходит. Попробуйте запустить JVM с ограничением по памяти. Код: java 1. 2. 3. Так и не должно было быть. Этот прием применяется в том случае, если вам надо обрабатывать данные параллельно и на самом деле важен каждый килобайт. Суть в том, что пиковый размер выделяемой памяти данный метод не меняет, но после его вызова памяти может начать выделяться. Насколько меньше - зависит от размера массива. См. capacity и load factor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 22:46:31 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
rdmЭто случайно не с T system задание? )Нет :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 22:57:10 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Я в Джаве новичок, так что не орите , но разве LinkedList не лучше ArrayList, ведь первый оптимизирован для последовательных доступов, т.к. является связанным списком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:06:12 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
LeonidvПодключите профайлер (visualvm, например) и через него смотрите, что происходит. Попробуйте запустить JVM с ограничением по памяти.А как ограничить JVM ? Пытаюсь, но не получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. А дока вообще говорит, что: -X Command-line options Код: plaintext 1. 2. 3. PS. D:\JAVA\1Probe>java -version java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b05) Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:09:01 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
А ещё можно узнать, зачем копировать огромный текст в коллекцию? Я бы уже копался, пытаясь узнать, как считать текстовый файл с последней строки до первой. Тогда и не надо большие объемы памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:12:40 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Как вариант, создайте локальную БД (типа SQLite) с одной таблицей и загоняйте туда последовательно все слова (вместо ArrayList'а)... из БД доставайте при помощи запроса "SELECT ... ORDER BY ID DESC" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:19:27 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
LeonidvПодключите профайлер (visualvm, например) и через него смотрите, что происходит.Просветите неуча: вот запустил я его, дальше запустил java myapp - и как его профилировать ? он (myapp) появляется на доли секунды в левой панели ("дереве" приложений) и тут же исчезает :/ Здесь читал, но там он "запустил фоном DaCapo:lusearch" - т.е. это приложение у него постоянно торчит в списке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:27:13 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Паша01А ещё можно узнать, зачем копировать огромный текст в коллекцию? Я бы уже копался, пытаясь узнать, как считать текстовый файл с последней строки до первой. Тогда и не надо большие объемы памяти.ну так мне в конечном счете это и надо: прочитать текст "от обратного". Только я нигде не видел такого, чтобы файл "задом наперёд" читать можно было :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:30:26 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosisТолько я нигде не видел такого, чтобы файл "задом наперёд" читать можно было :-) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:32:10 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Usmanozzmosis, Как вариант, создайте локальную БД (типа SQLite) с одной таблицей и загоняйте туда последовательно все слова (вместо ArrayList'а)... из БД доставайте при помощи запроса "SELECT ... ORDER BY ID DESC"Спасибо, попробую. Но не с SQLite'ом, а с другой базой. Только есть смутное терзание, что по времени тоскливо станет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 23:32:35 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Usman Код: java 1. 2. 3. 4. 5. 6. 7. 8. теперь с расходом памяти всё пучком (16 мегов), но время выполнения стало тихим кошмаром: 42 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 00:19:11 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Должен быть выигрыш в несколько секунд: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 04:51:28 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 08:42:17 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Все приведенные варианты решения так или иначе связаны с расширением массива символов, что затратно. Уж хотя бы StringBuilder'у сразу задайте размер побольше. Или просто загнать весь файл в структуру char[]? А потом пройтись обычным циклом по всем элементам с нахождением слов. Тогда расход памяти не должен превышать размер входного файла, а проход по 8М байтов в памяти - сущий пустяк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 09:29:21 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
По-моему, напрашивается Memory Mapped file - совершенно необязательно весь файл зачитывать в память, достаточно отобразить его в память, и зачитывать оттуда небольшие кусочки, начиная с хвоста. Как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 09:52:02 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
WGAИли просто загнать весь файл в структуру char[]? Да вообще лучше без этого, а если файл под 1 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 10:19:35 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ivanraзачитывать оттуда небольшие кусочки не вариант, можно слова порезать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 10:32:50 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis Код: plaintext 1. 2. хотя леонидв намекнул об етом ссылкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 10:37:09 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, хранить в списке нужно не слова, а целочисленные смещения курсора относительно начала файла, тогда потребуется обычный целый массив: читаем словечко, запоминаем смещение и тд и тп. ну и потом в обратном порядке проходим массив, позиционируем курсор и читаем до следующей позиции, как то-так Зачем что-то кэшировать? Роль буфера вполне выполнит уже имеющийся файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 10:43:27 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosisВсем привет. Есть текст среднего размера, его надо разбить на слова и вывести затем эти слова в обратном порядке в новый файл. То есть, для входного файла с таким содержимым: Код: java 1. 2. 3. 4. 5. 6. 7. - надо получить на выходе: Код: java 1. 2. 3. 4. 5. 6. 7. Исходный файл небольшой: размер около 8 Мегов, содержит 149 тыс слов (язык - английский). Полазив в интернетах, сделал следующий класс: Код: 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. 45. 46. 47. 48. 49. Однако расход памяти в пиковый момент достигает 117 мегов (для всего 8 мегов исходного текста). Покритикуйте, плз, код: я вообще в ту степь полез или надо медитировать над другими способами ? Как уменьшить расход памяти ? Сам текстовый файл тут: http://yadi.sk/d/5UsjXzJ-3VcUs] http://yadi.sk/d/5UsjXzJ-3VcUs Заранее спасибо за ответы. такто вощето надо 1. вместо list использовать Stack 2. в него класть строки, прочитанные из файла, без всяких сплитов 3. потом делать stack.pop().split() 4. и в обратном порядке писать етот массив в файл скорость скорее всего не увеличится используемая память уменьшится раза в два так наверняка пасмари если не лень ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:48:03 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
grasoff.net, Те же сферические объекты, вид с боку, ЗАЧЕМ ВООБЩЕ файл грузить в ОЗУ целиком? Не важно, как он логически будет разбиваться на объекты, в любом случае потребуется оперативка в размере файла, плюс всякие дополнительные данные для поддержки выбранной структуры классов. А если файл будет не 8 М а все 200 М и все - картина маслом. Задача - отиндексировать файл по началу строк и полученный индекс разместить в фале или в массиве и по индексу в обратном порядке считывать одну строку из файла. Ресурсов ОЗУ - на одну строку с максимальной длинной. Плюс не надо генерить и инициализировать кучу сопутствующих объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:02:34 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
enyТе же сферические объекты, вид с боку, ЗАЧЕМ ВООБЩЕ файл грузить в ОЗУ целиком? Традиционная оптимизация. Чтобы достичь максимальной эффективности работы CPU, нужно свести IO к минимуму, загрузива данные в память. Вот только структура нужна оптимальная для задачи. enyЗадача - отиндексировать файл по началу строк и полученный индекс разместить в фале или в массиве и по индексу в обратном порядке считывать одну строку из файла. Ресурсов ОЗУ - на одну строку с максимальной длинной. Плюс не надо генерить и инициализировать кучу сопутствующих объектов. Индексирование тоже дополнительные ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:05:25 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Почему нельзя читать файл с конца и сразу писать в новый файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:16:18 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ОзверинПочему нельзя читать файл с конца и сразу писать в новый файл? i second this. also можно читать/писать например буфером N КБайтов, будет и быстро и памяти около нуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:37:19 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, авторсодержит 149 тыс слов (язык - английский). слов всего 1,500,000 слов без повторов 28307 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:46:21 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#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. 32. 33. 34. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:18:26 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
WGAИли просто загнать весь файл в структуру char[]? А потом пройтись обычным циклом по всем элементам с нахождением слов. Тогда расход памяти не должен превышать размер входного файла, а проход по 8М байтов в памяти - сущий пустяк.Да, но размер char-массива - его ведь тогда заранее надо задать ? grasoff.net 1. вместо list использовать Stack <...> скорость скорее всего не увеличится используемая память уменьшится раза в дваОтличный совет, большое спасибо! Именно так и получилось: память уменьшилась до 55 мегов (т.е. в два с небольшим раза), скорость возросла: стало 3 секунды вместо 4.5 для ArrayList'a. Одного понять не могу: итерация по стеку должна ВСЕГДА идти вроде как в LIFO-порядке ? Если так, то странно как-то: Код: java 1. 2. 3. 4. 5. - обрабатывает строки, начиная с "дна" стека, а не с его вершины. Пришлось через while делать: Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:22:45 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
bajork Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Памяти действительно только 8 мегов расходовало, но: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:29:21 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosisОдного понять не могу: итерация по стеку должна ВСЕГДА идти вроде как в LIFO-порядке ?Нарыл, вопрос снят. Попробовал до кучи ArrayDeque, в доке говорится , что онClass ArrayDeque<E>is likely to be faster than Stack when used as a stack- но нет, те же самые 55 мегов и 3.2...3.5 секунды. Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:55:51 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#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. 32. 33. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:58:19 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
bajork Код: java 1. 2. 3. 4. 5. работает очень быстро, 0 сек. Только файл-результат тоже почему-то... нулевого размера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 17:05:54 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
BufferedReader(..., int sz): какой по дефолту размер буфера у этого класса ? я вот поигрался со значениями 512, 1024, ..., 65536, 131072 - и не вижу во времени выполнения никакой разницы вообще. Всё те же 3 секунды (для ArrayDeque). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 17:07:37 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosisТолько файл-результат тоже почему-то... нулевого размера на всякий случай, вот код (файл c:\hugetext - существует и имеет размер 8338665 байт): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 17:10:07 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosis, строчку buff[idx++] = (char)ch; удалил ;) надо было закопипастить... кстати размер памяти можно понизить делая сброс буфера записи но при этом повысится время... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 17:13:39 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
bajorkстрочку buff[idx++] = (char)ch; удалил ;) надо было закопипастить... кстати размер памяти можно понизить делая сброс буфера записи но при этом повысится время...В общем, рекорд: 1 сек! Правда, проглатывает лишние пустые строки, а также в первом слове (в ИСХОДНОМ тексте; в новом оно будет последним) удаляет первую букву. Например, для текста: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. Но это уже мелочи, поправимо. Большое спасибо за наводку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 17:25:43 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Не могли бы вы попробовать Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 19:11:36 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪ, я же дал выше ссцылку на файл, что мешает Вам это сделать ? (просто меня интересовало эффективное решение именно на яве) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 21:18:52 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Ява в 30 раз быстрее, хотя сравнивать не совсем корректно, потому что решение на шелле обладает большей функциональностью (умеет юникод). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 21:43:25 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЯва в 30 раз быстрее, хотя сравнивать не совсем корректно, потому что решение на шелле обладает большей функциональностью (умеет юникод). Скажите мне кто-нибудь, о чем это сообщение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 10:54:40 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
если больших файлов не планируется, делаем так: читаем все 8мб в charbuffer, а потом перебирая его с конца ловим слова и печатаем каждую такую charsequence. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 16:16:57 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
chabapokесли больших файлов не планируется, делаем так: читаем все 8мб в charbuffer, а потом перебирая его с конца ловим слова и печатаем каждую такую charsequence.Если я правильно понял вот это:bajork Код: java 1. - а также разъяснение доки: http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 16:26:55 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
ozzmosischabapokесли больших файлов не планируется, делаем так: читаем все 8мб в charbuffer, а потом перебирая его с конца ловим слова и печатаем каждую такую charsequence.bajork Код: java 1. Это разные вещи. В первом случае - чтение файла в память (в кучу), во втором - отображение файла в память (средствами ОС, память в куче не выделяется). Тут, чтобы понять разницу, надо читать не javadoc, а что-нибудь по операционке, например, Джеффри Рихтер. "Windows для профессионалов" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 16:42:20 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Сильно извиняюсь, что влез, но м/б после этого post(а) кому-нибудь захочется помедитировать на Питоне... камень i5 2.67Ггц. Расход памяти ~8Мег. Скорость выполнения на: Python 2.7 - 0.9сек. Python 3.2 - 2.8сек. Python 3.3 - 3.9сек. Pypy 2.0beta - 2.3сек. А для Cython(а) тут нечего оптимизировать. Код, в среднем, получается короче в 3 раза, как по горизонтали, так и по вертикали. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 11:38:32 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
superstealthпомедитировать Intel Celeron B815 @ 1.60GHz, Java 7, WinXP Время: 0.281 сек. Думаю можно ещё ускорить, но лень. Генератор Код: 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. Сам Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2013, 18:08:51 |
|
||
|
Парсинг .txt-файла размером 8Мб (разбивка на слова): жрёт ~120 Мб памяти
|
|||
|---|---|---|---|
|
#18+
Ошибся. Лишний раз -1 сделал. Так правильно Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 11:40:38 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129641]: |
0ms |
get settings: |
17ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
115ms |
get tp. blocked users: |
2ms |
| others: | 320ms |
| total: | 562ms |

| 0 / 0 |
