Текущий архив: 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
Мне так неудобнее.
← →
R © (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.49 MB
Время: 0.038 c