Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Вниз

3 вопроса по оптимизации приложения.   Найти похожие ветки 

 
Cr@sh   (2002-08-21 11:05) [0]

Ув. мастера, ответьте пожалуйста на два следующих вопроса:
1)Есть 15 выпадающих списков по 45 строк в каждом. Вопрос: как присвоить каждой строке действие с наименьшими системными затратами. Или кроме простого if... ничего нельзя?
2)Как вообще оптимизировать приложение содержащее около 500 if которые проверяются параллельно в две три потока?
3)Что посоветуете сделать если на 533 пентиуме при выше изложенном появляется "Out of Memory?".
Только не надо таких предложений, как "Выкинь свою программу на..." или "Смени комп".
Заранее спасибо.


 
murza   (2002-08-21 11:10) [1]

1) пройтись циклом
2) загрузить из текста в формате *.DFM
могу более подробно пояснить каждый вариант


 
Cr@sh   (2002-08-21 11:31) [2]

напиши поподробнее насчет цикла, но по моему он тут не подойдет - каждой строке должно быть сопоставлено свое уникальное действие.
и второй вариант тоже поподробне...


 
Alx2   (2002-08-21 12:03) [3]

>3)Что посоветуете сделать если на 533 пентиуме при выше
>изложенном появляется "Out of Memory?".
Поподробнее нужно про то, что там делается рассказать. Пока кажется, что глюк в алгоритме, либо он очень жаден.

>2)Как вообще оптимизировать приложение содержащее около 500 if
>которые проверяются параллельно в две три потока?
Зачем много потоков? Система многопроцессорная?

>1)Есть 15 выпадающих списков по 45 строк в каждом. Вопрос: как >присвоить каждой строке действие с наименьшими системными >затратами. Или кроме простого if... ничего нельзя?

Если это combobox, то можно у items использовать свойство objects в качестве целочисленного параметра для case, в котором будет выбираться нужное действо.


 
evgeg   (2002-08-21 12:04) [4]

Массив фунцкций с индексированием по №списка, ItemIndex. № списка можно хранить в TComboBox.Tag.

Что за действия, примерчик можно?


 
kull   (2002-08-21 12:45) [5]


> 1)Есть 15 выпадающих списков по 45 строк в каждом. Вопрос:
> как присвоить каждой строке действие с наименьшими системными
> затратами. Или кроме простого if... ничего нельзя?

Если я правильно понял, то может тебе поможет следующее:

Использовать TCombobox.Items.Objects[i] как указатель на функцию с нужным действием, а потом ее и вызывать.

А вообще-то поподробнее опиши что за списки, что за задача, и т.п.


 
Alx2   (2002-08-21 12:49) [6]

>Использовать TCombobox.Items.Objects[i] как указатель на
>функцию с нужным действием, а потом ее и вызывать.

Только не получится туда запихать адрес метода, что может быть неудобно :)



 
kull   (2002-08-21 13:11) [7]


> Alx2
> Только не получится туда запихать адрес метода, что может
> быть неудобно :)

Почему? Получится. Можно запихать что угодно.

type
TMyMethod = procedure of object;
PMyMethod = ^TMyMethod;

procedure TForm1.FormCreate(Sender: TObject);
var
pM: PMyMethod;
i: Integer;
begin
New(pM);
//естественно, что потом где-то надо вызвать что-то типа
//Dispose(PMyMethod(ComboBox1.Items.Objects[0]))

pM^ := MyMethod;
for i := 0 to ComboBox1.Items.Count - 1 do
ComboBox1.Items.Objects[i] := TObject(pM);
end;

procedure TForm1.MyMethod;
begin
Beep;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.ItemIndex >= 0 then
PMyMethod(ComboBox1.Items.Objects[ComboBox1.ItemIndex])^;
end;


 
Игорь Шевченко   (2002-08-21 13:12) [8]

Alx2 © (21.08.02 12:49)

> Только не получится туда запихать адрес метода, что может
> быть неудобно :)

Разве ?


 
kull   (2002-08-21 13:13) [9]


> kull © (21.08.02 13:11)

Может можно и проще, но я не допер.


 
Cr@sh   (2002-08-21 13:51) [10]

Идея программы в следующем:
рисуется график, у него может быть до 15-ти слоев штриховки.
а эти комбобоксы содержат их названия(всего 45 видов штриховки ). Нажал кнопочку - слои нанеслись. Но это еше ладно. Так представьте, что этих графиков может быть до 12 рядом, и у каждого до 15 слоев... а еще высоту штриховки нужно задавать.
Вот из-за этих 15-ти графиков с 12-ю слоями и тормозит.
У меня-то на четверке все пашет велеколепно, а вот на другом компе 533 пне, немного поработает, а потом "аут оф мемори". А на 433 просто виснет...


 
kull   (2002-08-21 13:59) [11]


> Cr@sh © (21.08.02 13:51)

Так это не из-за комбобоксов скорее всего. А из за графиков.
Ну 12 комбобоксов на 45 = 540 итемов - да это тьфу, и растереть.

Надо искать проблемму в графиках.
Знакомая картина. Наверное что-то не освобождается, либо память, либо ресурсы.



 
lenin   (2002-08-21 13:59) [12]

А зачем тебе это все вешать на ComboBox, вешай на кнопку, и там проверяй что выбрано.


 
Alx2   (2002-08-21 14:05) [13]

>lenin © (21.08.02 13:59)
Золотые слова. Серьезно.


 
Cr@sh   (2002-08-21 14:26) [14]

>lenin, Alx2
Дык, на к4нопке все и висит...

Тока, я думаю, все это у меня в две-три процедуры запихано и проверка и штриховка и нанесение текста, может на 10 процедур лучше разбить?


 
kull   (2002-08-21 14:35) [15]


> Тока, я думаю, все это у меня в две-три процедуры запихано
> и проверка и штриховка и нанесение текста, может на 10 процедур
> лучше разбить?

Разбить-то в любом случае лучше (принцип: разделяй и властвуй).
И вообще, когда функция не умещается на страницу, стоит задуматься...


 
lenin   (2002-08-21 14:36) [16]

Да не в количестве процедур дело, как писал kull © (21.08.02 13:59) у тебя что-то не освобождаеться. Надо смотреть сам код.


 
Cr@sh   (2002-08-21 14:51) [17]

>lenin
может 6463 строки суда запихнуть?


 
kull   (2002-08-21 16:14) [18]


> может 6463 строки суда запихнуть?

Да я же говорю - надо разбить код на несколько функций, убрать повторяющийся код (например, опять же с помощью функций).
Короче провести небольшой рефакторинг, привести его в порядок - можно будет хоть разобраться что где вызывается и какая часть чего съедает.
А потом можно и оптимизацией заняться.


 
Cr@sh   (2002-08-21 16:18) [19]

Пасиба, будем работать...


 
murza   (2002-08-22 11:33) [20]

Пишу кратко, так как скорее всего не по теме

Прочитав вышенаписанное, я окончательно запутался, чего же тебе надо. Итак если я все правильно понял:
По-моему никаких действий присваивать не надо. Если все комбобоксы равноправны то может подойдет следующее: завести массив "действий" - это либо реальные Actionы, либо указатели на обработчики, либо просто данные (тип штриховки). В обработчике выбора строки (или нажатия кнопки) выбираешь нужное действие, индесируя этот массив индексом строки.

Если же они не равноправны (тогда я точно ничего не понимаю) ...
опять же присваивать не обязательно... см. предыдущий вариант.
только надо завести несколько массивов с действиями.

Если же желательно хранить действия не где-нибудь а в комбобоксах
тогда:


> напиши поподробнее насчет цикла, но по моему он тут не подойдет
> - каждой строке должно быть сопоставлено свое уникальное
> действие.

с циклом остается самый извратный вариант - копируешь действия из своего массива (массивов) в комбобоксы.
> и второй вариант тоже поподробне...
с DFM я маленько пролетел. Это мог бы быть вариант заполнения каких либо свойств (например пунктов меню) обработчиками или тагами: пишешь обработчики пишешь, DFM, а билдер за тебя все присвоит (с большими затратами чем ты сам)
Но этот вариант не подходит, так как строки комбобоксов - это просто строки. Туда через DFM ничего не запихнешь



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
14-3612
lak_b
2002-08-07 18:58
2002.09.02
Д


3-3273
Sergey-ZZZ
2002-08-12 15:13
2002.09.02
InterBase


1-3422
MikeZ
2002-08-22 16:52
2002.09.02
Как получить список запущеных exe-шников? Не окон, а файлов.


6-3544
dimmu2
2002-06-12 11:53
2002.09.02
пресловутое окно активных игр


3-3321
Serg1977
2002-08-13 15:17
2002.09.02
Вопрос ! Как можно написать приложение БД не используя БДЕ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский