Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизУвеличить скорость работы процедуры Найти похожие ветки
← →
Phn (2003-12-13 16:51) [0]Здравствуйте, Мастера! Вопрос довольно необычный. Как можно ускорить работу процедуры? Т.е как правильно работать с памятью, какие внутренние процедуры\функции лучше не использовать и тд. Также буду благодарен за ссылки на материалы по этому поводу.
← →
Calm (2003-12-13 17:03) [1]хм...
что значит "ускорить"? Если ты спрашиваешь абстрактно, то в 99,99% случаев тебя скорость устроит. А вот если не устраивает, то каждый такой случай нужно отдельно разбирать.
← →
Юрий Федоров (2003-12-13 17:14) [2]Ты приведи код процедуры, которую нужно ускорить.
Вот я например давеча копался в чужом коде с целью ускорить выполнение процедуры - так там получение таблицы из Oracle было организовано циклом, сначала получали SQL запросом количество записей, а потом в цикле каждую запись вытаскивали опять же SQL запросом. Ускорил на 2 порядка:-)
Надеюсь, у тебя не такой случай :-)
← →
Phn (2003-12-13 19:14) [3]Да в том-то все и дело, что код не приведешь. Там более 300 000 строк. Я пытался убирать по-моему мнению медленные процедуры и функции - то же самое. Загрузка длится около 6 секунд. Я знаю, например, что функция length() медлительна с большими объемами текста. А какие есть еще ф-ции и процедуры, которые потенциально могут тормозить загрузку/работу? И еще небольшой вопрос: сильно ли зависит скорость запуска программы от количества форм?
← →
Anatoly Podgoretsky (2003-12-13 19:18) [4]Одназначно увольнять, дакое даже в самом страшном сне не приснится. 300 000 в процедуре - ужас.
← →
sniknik (2003-12-13 19:49) [5]Юрий Федоров © (13.12.03 17:14) [2]
тебе случаем не ту же программу дали что и мне? (нет у мене не Oracle :о)
но похоже, цикл в цикле, в первом групировка и получение сумм по групам во внутреннем пробежка по группе и еще вложенный на выборку из другой таблици. и все копируется в другую базу, по очереди.
вместо всего сделал одно обьеденение, суммы по ходу цикла на копирование получаю. скорость около 10-15 сек. против бывших 10-15 мин.
;о))
мало того, там еще и ошибка в логике, не всегда правильно работает. сказал что проще переписать заново чем искать, заодно и другое быстрее будет. знаеш что сказали? зачем? работает же, ты главное ошибку исправь.... (у меня аж руки опустились, только что сказал переписать проще будет и быстрей (не только скорость процедуры но и написания))
хорошо это не мое начальство, а "залетное" ;о)) (в переносном смысле).
Phn (13.12.03 19:14) [3]
сделай им тест. GetTickCount вначале и конце разница время выполнения (приблизительная -время на сам GetTickCount, + погрешность виндов (каждый раз разные результаты) зависит от загруженности системы)
после тестов составь табличку, выложи сюда, так и другие узнают о "вредных" в использовании процедурах. ;о))
← →
Материалист (2003-12-13 19:57) [6]
> Там более 300 000 строк
И это называется процедура?!
Мда... как говрил один мой знакомый патриот: "...это какой-то лобок."
← →
KosilkA (2003-12-13 20:09) [7]300000 строк это даже для модуля многовато будет
← →
Юрий Федоров (2003-12-13 20:37) [8]>>sniknik © (13.12.03 19:49) [5]
Нет, не та, но писали явно "братья по разуму".
Увольнять. Нет, сначала руки отрывать.
Наш гений, правда уже сам уволился.
У меня получилось 2 сек против бывших 4 мин.
> Там более 300 000 строк
Вариант один - снести нафиг, написать заново
← →
Юрий Зотов (2003-12-13 21:53) [9]> Phn (13.12.03 19:14) [3]
> Там более 300 000 строк.
Если это действительно так, то это не просто ужасно, а вообще нечто экстраординарное. Впрочем, слабо верится.
> Я пытался убирать по-моему мнению медленные процедуры и
> функции - то же самое. Загрузка длится около 6 секунд.
Значит, не то убирали.
> Я знаю, например, что функция length() медлительна с большими
> объемами текста.
Неверно в принципе. Функция Length не просматривает текст, а просто сразу берет уже готовое число по известному ей адресу. Естественно, ей без разницы, какое именно число там лежит.
> сильно ли зависит скорость запуска программы от количества
> форм?
Если формы статические, то довольно сильно - ведь каждую из них надо и создать, и залить из ресурсов. Поэтому форму лучше создавать динамически, когда она реально нужна (и уничтожать, когда она стала ненужной). В этом случае время загрузки программы от количества форм в ней зависеть практически не будет.
← →
Soft (2003-12-13 22:46) [10]>>Phn (13.12.03 16:51)
>>Здравствуйте, Мастера! Вопрос довольно необычный. Как можно ускорить работу процедуры?
Позволю выразить свое мнение. Если скорость работы процедуры визуально не заметна - забить на оптимизацию. Если заметна визуально тогда: почитать материалы по математическим методам и попробовать их применить, избегать повторных вычислений(вычисленное значение хранить в памяти), поискать описание быстрых алгоритмов у того же Кнута или других программистов-теоретиков.
← →
Юрий Федоров (2003-12-13 22:52) [11]В любом случае, если процедура работает медленно, существует два варианта
1. Она написана через Ж -> переписать
2. Она написана грамотно -> Значит она и должна так работать
← →
sniknik (2003-12-13 23:39) [12]Юрий Федоров © (13.12.03 20:37) [8]
заабавно ... наш тоже уволился. ;о))
но я его не обвиняю (неправильно написано и т.д. хотя это так), писал админ по личной инициативе, просто разобратся. а вот то что программу кудато комуто отдали в пользование вот это да. (менеджерам я бы по башке настучал... ;о), хотя их много, могут и они мне :(, но мне будет несправедливо!!! а им за дело. :о)))
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c