![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
regen |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Доброе время суток.
Сначала вкратце скажу что необходимо мне сделать: Надо написать просмоторщик для прайсов одной фирмы. Прайсы хранятся в файле. Сейчас готово у меня приложение (GUI) в котором реализован пока метод который открывает файл (JFileChooser) и выводит его в таблицу. Таблица зарнее была создана таким образом:
затем в конструкторе делаю:
при открытии файла происходит вот что:
Теперь вопрос: В результате когда я открываю прайс-лист в котором около 200000 наименований (размер файла примерно 9 Mb) то это приложение потребляет чуть больше 70 (!!!) Mb памяти. А ведь это просто открытие файла и вывод в таблицу. Как можно уменьшить объём потребляемой памяти? Может я что-то делаю не так? P.S.: До открытия файла приложение потребляет около 5 Mb. Заранее спасибо |
||||||
|
|||||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Ну дык... а что ты хотел....
Погляди сколько занимает 5 символов, сколько занимает объект String, который содержит такие 5 символом, и хотя бы хэшсет(или эррэйлист), который содержит такие String'и. Понятно, что вытянуть гигабайтную БД на клиента - это будет явно не 100 килобайт ![]() По идее, надо подчитывать файл по кускам. При необходимости. А если надо всё и сразу - то мирись. Можешь провести рефакторинг, кое-где подчистить, но до 5 Мб с загруженым файлом такого размера не доведёшь. В 2 бита операционную систему не впихнуть ![]() -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
regen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
1) Какие методы сокращения использовании ресурсов памяти вообще существуют в Java? Только ли Hachtable?
2) Можно ли в Hachtable записать объект типа Vector элементами в котором являются тоже Vector-а (по сути двумерный массив) без потери струкутры и типа? В первоисточнике сказано что hachtable принимает на входе Object (метод put) и возвращает объект типа Object (метод get). Это я спрашиваю из--за того что хочу все данные по таблице (переменая data в модели этой таблицы) хранить в hachtable. Как мне представляется ресурсов будет кушаться меньше. Или я не прав? Заранее спасибо за ответ |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Самый действенный и простой (и провереный) способ - явно обнулять все переставшие быть нужными переменные и чистить коллекции.
-------------------- ![]() ![]() |
|||
|
||||
regen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
А если переменную обнулить нельзя? Если она используется постоянно но никак при этом не меняется? Тогда что?
|
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
В вашем случае:
1. Не закачивать всех данных в таблицу, полные данные записи подгружать при клике на записи; 2. Выгружать содержимое вашего текстового файла во временный файл с возможностью позиционирования на конкретную запись и подгружать только видимые данные. -------------------- ![]() ![]() |
|||
|
||||
Bulat |
|
||||||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
Конечно не знаю, до 200000 строк еще не обрабатывал, может не лучший вариант, но если сделать класс-контейнер: (все исключения сам уж разберешь
![]()
метод в классе для считывания из файла
и вызываешь все это:
Сам работаю с БД, использую вот такую конструкцию, а там объемов тоже хватает и вроде бы нормально, терпимо ![]() Это сообщение отредактировал(а) Bulat - 6.7.2006, 12:12 -------------------- менеджер по кодеврайтингу ![]() |
||||||
|
|||||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Всё что угодно. Ей плевать что ты в ней хранишь. Шлавное, чтоб ты Object потом привёл к нужному виду. Она ничего не будет ломать в Object'e, который отдаёшь ей на хранение. Мало место у тебя не будет занимать, потому как файл большой. - Или постраничная подгрузка, как уже советовали, - или неполная выборка объекта из файла(подгрузка по запросу), как тоже уже советовали, -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Я однажды делал анализатор логов с предобработкой, где тоже необходимо было все данные лога держать в памяти. Я пришел к результату 10:1 (на десять мегабайт лога моя прога кушала 1 мегабайт памяти).
Так как основная чать лога представляла собой текстовую информацию (имена, названия, адреса и прочее), я решил избавиться от избыточных данных. Все строки я разбивал на слова, помещал их в словарь, ассоциируя с численным ключом. При сортировке и фильтрации данных я работал не с исходными строками, а с их ключами. Также только ключи я использовал в объектном представлении лога. Сам текст вытаскивался из словаря только при отображении. Кстати, при таких объемах информации стоит не стоит использовать HashSet, HashMap или Hashtable - медленно работают уже на десятке тысяч элементов. Предпочтительнее TreeSet или TreeMap. -------------------- ![]() ![]() |
|||
|
||||
Bozo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
regen, а в чем проблема, на компе нет 70мб памяти? Всего 32? Или сколько? Или нужно 15 таких файлов открыть, каждый в своем окне и 15*70 это много?
|
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
Bozo, поиск оптимального пути всегда должен приветствоваться, даже если размеры задачи не глобальные
![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |