Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.05;
Скачать: CL | DM;

Вниз

Увеличить скорость работы процедуры   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
9-11760
NailMan
2003-06-16 18:03
2004.01.05
Звуковой движок игры


9-11767
dcu
2003-06-12 12:38
2004.01.05
Вращение в 3D пространстве


14-12105
maga001
2003-12-12 22:16
2004.01.05
Одно


14-12072
VictorT
2003-12-10 12:22
2004.01.05
Помогите плиз, не могу найти рассказ Феликса Кривина про коров


14-12167
cyborg
2003-12-11 11:14
2004.01.05
Обработку прокрутки колёсиком