|
|
|
Парсинг .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?fid=59&startmsg=38197089&tid=2129641]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
66ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 318ms |
| total: | 527ms |

| 0 / 0 |
