Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-12149
Alexey Lipatov
2003-12-12 17:33
2004.01.05
Неправильно показываются фильмы


1-11925
Ярослав
2003-12-20 23:17
2004.01.05
отображение блоков данных в Hex виде


1-11870
Goshi
2003-12-21 22:54
2004.01.05
Загрузка TrueColor иконок в TImageList


14-12136
craZy kurt
2003-12-11 19:02
2004.01.05
Бесследное удаление файлов


3-11782
T
2003-12-09 17:24
2004.01.05
Как выделить месяц в запросе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский