|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
|||||||||||
Оптимизация кода для вывода категорий.14.08.2010, 11:46. Показов 1777. Ответов 11
Метки нет (Все метки)
Здравствуйте. У меня есть таблица с категориями примерно с такой структурой.
Эта программа выведит таблицу в таком виде: Java / Jsp Java / Flex
Tree(n); Более 10 тысяч раз чтобы записать результат метода в другую таблицу но генерится java.lang.OutOfMemoryError: Java heap space из за 8 строки. Есть ли способ оптимизировать код чтоб он не жрал столько памяти. Или может быть есть другой алгоритм для работы с категориями.
0
|
|||||||||||
| 14.08.2010, 11:46 | |
|
Ответы с готовыми решениями:
11
Условие if для вывода категорий Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода |
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||||||
| 14.08.2010, 11:59 | ||||||
|
а что возвращает эта строка???
и что тогда Tree()?? бинарное дерево или? почему и зачем рекурсивно в цикле вызывается дерево? ИМХО ,если я правильно представляю , вся проблема тут в цикле... у тебя с каждым новым рекурсивным вызовом дерева, цикл будет идти паралельно старому(вплане выполнять тоже самое что и предыдущие). в чем такая необходимость?
0
|
||||||
|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
|
| 14.08.2010, 12:57 [ТС] | |
|
К примеру вызываем Tree(2) ResultSet вернёт parent=1 (это родитель)
после этого в цикле вызываем Tree(1) (как это видно в коде) но замете экземпляр метода Tree(2) ещё не завершён он ждет завершения Tree(1). когда Tree(1) выполняется к name прибавляется Java, а когда заканчивает то продолжает своё выполнение Tree(2) и конкатенирует name Jsp. Поэтому ни чего там параллельно не выполняется.
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 14.08.2010, 13:52 | |
|
я же написал что не про паралельное выполнение.
приведу тебье простой пример и я думаю поймешь что я имел ввиду и вчем проблема. допустим rs получает строку, затем начинается цикл с условием ПОКА СУЩЕСТВУЮТ ЕЩЕ СТРОКИ выполнять цикл.из этого цикла вызывается дерево.таким образом начальный ID=1, после входа в цикл стал ID=2 ,так же допустим что есть еще ID 3 ,4,5, и т.д. после вызова tree(2) твой цикл не прекращает работу он бесконечно вызывает tree(2) , а из каждого tree(2) вызывается tree(3) и так же зацикливается. Так как в while(rs.next()) нету прироста(продвижения, т.е. твое условие остается неизменным постоянно) rs т.е. он просто проверяет , что у какого-то rs есть next и так происходит зацикливание. Если правильно представляю твою затею, то поставь if(rs.next()) вместо while(rs.next())
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
||||||
| 14.08.2010, 14:29 [ТС] | ||||||
|
Программа работает немного не так как ты это скорее всего представляешь.
Во первых категории строятся не от родителя к потомку а от потомка к родителю т.е
А в третьих можно поставить и if но это не важно потому что while работает пока условие истинно в этом случае оно истинно всегда 1 раз.
0
|
||||||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||||||
| 14.08.2010, 14:52 | ||||||
|
выхода из цикла нету=) ты походу с рекурсией запутался. первый раз зашел в цикл вызвалось дерево(2) допустип в какой то момент завершилось рекурсивное выполненеие . но изначально начатый цикл не прерывается.... посмотри внимательно на конструкцию while своего, нет условия для выхода
у тебя конец выполнения рекусрии когда дерево(0) а вот дерево(n>0) никогда не прекратится в цикле будет все время вызываться дерево(n) Добавлено через 34 секунды Посмотри в дебаггере именно на этот цикл проведи его доконца только для примера возьми 10 строк например Добавлено через 8 минут Пример:
0
|
||||||
|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
||
| 14.08.2010, 15:09 [ТС] | ||
, а это уже и есть выход из цикла. Тем более экземпляр ResultSet создаётся для каждого нового вызова метода. А если в базе нет нулевого id то rs.next() изначально будет false тогда метод уже нее будет вызываться
0
|
||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||
| 14.08.2010, 15:16 | ||
|
но вот он зашел в tree(5) rs=4 (например) rs.next=3 соответственно rs.next() будет возвращать true и так как rs остается все тем же rs=4 в цикле tree(5) => rs.next() всегда true; короче попробуй if вместо while и увидишь сам. ПыСы в дебаггере смотрел вообще??!
0
|
||
|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
||
| 14.08.2010, 15:32 [ТС] | ||
Также rs=4 ни как не связан с rs=3 потому что объект ResultSet создаётся при каждом новом вызове метода ведь это не глобальная переменная которая могла бы действовать на цикл так как ты говоришь. Я пробовал if вместо while результат как и ожидалось прежний.
0
|
||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 14.08.2010, 15:56 | |
|
кинь весь код ...
и что дебаггер говорит?!
0
|
|
|
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
|
|
| 16.08.2010, 12:55 | |
|
По-моему, подход изначально неверный. Посмотри как в swing реализовано дерево (JTree + TreeModel + TreeNode) и сделай подобное. Все на самом деле просто, я сейчас пример найти не могу, но у меня похожая задача была, и решалась она за 1 запрос типа "select * from table"
0
|
|
|
30 / 24 / 7
Регистрация: 27.05.2010
Сообщений: 99
|
|
| 17.08.2010, 03:10 | |
|
раз запрос жрет много памяти
зачем делать его много раз?
0
|
|
| 17.08.2010, 03:10 | |
|
Помогаю со студенческими работами здесь
12
Оптимизация кода для повышения скорости выполнения? Оптимизация кода для ускорения работы прораммы
Ошибка вывода категорий smarty Оптимизация кода пакетного файла для создания бэкапов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|