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

Вниз

Почему компонент созданный ран-тайм тормозит как чёрт знает что ?   Найти похожие ветки 

 
Алекс А   (2004-07-16 01:23) [0]

У меня СтрингГрид с возможностю сортировки по колонкам. Отображаться он не должен, поэтому я решил переделать программу, чтобы он создавался ран-тайм, работал, а потом удалялся. Всё работает, но тормозит жутко. Раз в сто наверное медленнее, чем должно. То, что раньше пролетало за секунду, теперь приходится ждать больше минуты. С чем это может быть связано, и как можно ускорить ?


 
NikB   (2004-07-16 01:43) [1]

(Извини отсъствие некоторьих символов)

Ран-тайм не имеет никакую связ с видимост или с скорост. Наверное у тебе стринг грид получился большой, но мне кажется, что вероятнее твоя програма не работает хорошо с памятью.
Проблема не в ран-тайм, не в стринг грид, буть уверен!

А как можно ускорит - ето интереснее. Например когда создаеш свой грид, создавай и что-то вроде индекс для каждой колоне. Тогда твой грид всегда будет сортиран по всех колон.


 
Алекс А   (2004-07-16 02:05) [2]


> Наверное у тебе стринг грид получился большой

Иногда маленький, иногда большой, иногда очень большой. Для того он и нужен. Когда я его просто кидаю на форму и работаю с ним, то всё быстро. А когда создаю, то тормозит. Почему ?


>  вероятнее твоя програма не работает хорошо с памятью.

А что сделать, чтобы она хорошо работала с памятью ?


> А как можно ускорит - ето интереснее. Например когда создаеш
> свой грид, создавай и что-то вроде индекс для каждой колоне.

Лишние действия - они лишние.


 
ЮЮ ©   (2004-07-16 03:10) [3]

>Когда я его просто кидаю на форму и работаю с ним, то всё быстро

Вот и кидай, а Visible поставь false.
P/S. довольно неразусно использовать визуальный объект исключмтельно для сортировки.


 
Алекс А   (2004-07-16 04:00) [4]


> ЮЮ ©   (16.07.04 03:10) [3]
> >Когда я его просто кидаю на форму и работаю с ним, то всё
> быстро
>
> Вот и кидай, а Visible поставь false.

Так и было раньше. Потом их стало два, потом три. Потом они мне надоели, и я решил сделать ран-тайм, а они торомозить начали. Почему ?


 
TUser ©   (2004-07-16 04:00) [5]


> Отображаться он не должен, поэтому я решил переделать программу, чтобы он создавался ран-тайм, работал, а потом удалялся.

Опиши свою задачу. Что-то не верится, что для чего-то может понадобится создавать невидимый грид. А чтобы было понятно, что тормозит - напиши здесь свой код.


 
Алекс А   (2004-07-16 04:31) [6]

StringAlignGrid21 := TStringAlignGrid.Create(Form1);
try
     StringAlignGrid21.Visible : False;
     StringAlignGrid21.ColCount  := 1;
     StringAlignGrid21.FixedCols := 0;
     StringAlignGrid21.FixedRows := 0;

     StringAlignGrid21.ResetAllColAll;
     StringAlignGrid21.RowCount := 0;
     StringAlignGrid21.ResetAllCellAll;

       repeat // В этом цикле тормоза.
...
         StringAlignGrid21.InsertRow(StringAlignGrid21.RowCount-1);
         StringAlignGrid21.Cells[0, StringAlignGrid21.RowCount-2] := s;
....
until ... ;

     StringAlignGrid21.SortColumn(0, True);

...

   finally
     StringAlignGrid21.Free;
   end;


 
TUser ©   (2004-07-16 04:37) [7]


> StringAlignGrid21.InsertRow(StringAlignGrid21.RowCount-1);

Ты просто пиши RowCount:=RowCount+1;
Да и вообще тут ты просто что-то сортируешь. Сделай массив рекордов и сортируй пузырьками/квиком/карманом/шелом/... по полю, которое ты заносишь в Columns[0]


 
Алекс А   (2004-07-16 04:47) [8]


> TUser ©   (16.07.04 04:37) [7]
>
> > StringAlignGrid21.InsertRow(StringAlignGrid21.RowCount-1);
>
> Ты просто пиши RowCount:=RowCount+1;
> Да и вообще тут ты просто что-то сортируешь. Сделай массив
> рекордов и сортируй пузырьками/квиком/карманом/шелом/...
> по полю, которое ты заносишь в Columns[0]


А как отлаживать массив не глядя ? Делаю как быстрее и удобнее.


 
TUser ©   (2004-07-16 04:56) [9]


> А как отлаживать массив не глядя

Ctrl+F7, Inspect, hints ect


 
ЮЮ ©   (2004-07-16 04:56) [10]

>А как отлаживать массив не глядя ?

Загнав в невидимый грид? :-)


 
Алекс А   (2004-07-16 04:59) [11]


> Ctrl+F7, Inspect, hints ect

Мне так неудобнее.


 
©   (2004-07-16 08:06) [12]

>repeat // В этом цикле тормоза.
...
        StringAlignGrid21.InsertRow(StringAlignGrid21.RowCount-1);
        StringAlignGrid21.Cells[0, StringAlignGrid21.RowCount-2] := s;
....
until ... ;


А что скрывается за ..., может тормоза именно там


 
Алекс А   (2004-07-17 01:13) [13]


> R ©   (16.07.04 08:06) [12]
> А что скрывается за ..., может тормоза именно там

Какая разница, если это и там и там одно и тоже ?
И что же там должно скрываться, чтобы возникли тормоза ?

В общем как я понял, никто не рубит в этой проблеме.


 
KilkennyCat ©   (2004-07-17 02:44) [14]


> В общем как я понял, никто не рубит в этой проблеме.


Не стал бы так категорично :)
Мастера наверняка знают.


 
Mim1 ©   (2004-07-17 06:09) [15]

procedure TForm1.Button1Click(Sender: TObject);
function CompareNames(Item1, Item2: Pointer): Integer;
begin
 Result := CompareText(TStringList(Item1)[1],TStringList(Item2)[1]);
end;
var sl:TStringList;
   i:integer;
begin
 with TObjectList.Create do
   try
     OwnsObjects := true;
     randomize;
     for i:= 0 to 9 do  // начало цикла
       begin
         sl:=tstringlist.create;
         sl.add(inttostr(random(9)));
         sl.add(inttostr(random(9)));
         sl.add(inttostr(random(9)));
         Add(sl);
       end;  // конец цикла наполняющего список
     Sort(@CompareNames);
     for i := 0 to count -1 do
       showmessage((items[i] as TStringList)[1]);
   finally
     free;
   end;
end;


 
TUser ©   (2004-07-17 07:10) [16]

Не знаю, что такое TStringAlignGrid, но метод InsertRow выглядит подозрительно в плане скорости.


 
Cobalt ©   (2004-07-17 09:33) [17]

2 Алекс А
может, попробовать использовать методы BeginUpdate/End Update?


 
KilkennyCat ©   (2004-07-17 12:21) [18]

Дело не в методах, вроде. Автор ветки же сказал, что в обоих вариантах методы одинаковые. За исключением создания.


 
Mim1 ©   (2004-07-18 22:59) [19]


> [16] TUser ©   (17.07.04 07:10)

Он там не присваивает parent так что скорее всего на отрисовку время не тратится. Там еще есть
>  StringAlignGrid21.Visible := False;
, :) , тока без парента эфекта с этого :)



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

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.05 c
1-1090078068
slaga
2004-07-17 19:27
2004.08.01
Dll и TStringList ???


1-1090392773
denmin
2004-07-21 10:52
2004.08.01
Как узнать на каком Label кликнули мышью?


3-1089279204
Sir John
2004-07-08 13:33
2004.08.01
конфигурация ODBC


9-1082796215
Комбинатор
2004-04-24 12:43
2004.08.01
Проблема с туманом...


3-1089360624
Pioneer
2004-07-09 12:10
2004.08.01
Пустая дата