|
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 22
|
|||||||||||
Оптимизация кода для вывода категорий.14.08.2010, 11:46. Показов 1793. Ответов 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 Оптимизация кода пакетного файла для создания бэкапов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|