Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизПочему ProgressBar такой медленный? Найти похожие ветки
← →
MadGhost (2004-01-24 22:46) [0]Уважаемые мастера, использовал в своем приложении ProgressBar Smooth:=true; ваще медленно потом попробовал Smooth:=false;
быстрее но все же :( , без ProgressBar"a работает все быстрее, есть ли какой нибудь компонент который бы не занимал столько времени на прорисовку?
← →
хз (2004-01-24 22:52) [1]Конечно есть. TLabel, к примеру. Ведь можно сделать и так:
Осталось до конца света: 60%
:о)
← →
Stilgar (2004-01-24 22:55) [2]Обычно все вешают на потоки (не прорисовку, а операции).
← →
MadGhost (2004-01-24 23:07) [3]Stilgar, спасиб канешна, но я не особо до конца понимаю работу потоков :( к сожалению, еси подскажете хорошую ссылку, буду примного признателен., да наверное в основном форуме создам по этому делу отдельную темку.
попробовал компонент Gauge из панели Sample, рулит по скорости!!!
← →
BorH (2004-01-24 23:09) [4]А для чего ты вообще его используешь??
Может обновлять его по таймеру?? Или по достижению какой-нибудь круглой цифры...
И вообще, какие могут быть претензии, если он показывает прогресс скачивания Контрстрайка по Диалапу?? 0,0000000001% :)
← →
BorH (2004-01-24 23:14) [5]2Stilgar
Наверное, ты таки имел в виду процесс - thread.
2MadGhost
Вот по процессам:
С:\Program Files\Borland\Delphi7\Help\Examples\Prgrsbar\
Очень, между прочем, доступно
← →
MadGhost (2004-01-24 23:16) [6]ну зачем, контрстрайк с инета :), неа, просто есть программулина она обрабатывает большой файл запакованный, т.е. файл запакованый распаковать надо, потом прочитать в распакованном файле много данных, и пользователю хотелось бы знать как мне кажется что делает в это время программа, т.е. процесс этот довольно длительный, несколько секунд. т.е. ожидание от программы каких то действий, в данном случае прогрессбар, теперь уже Gauge, и только он.
← →
Stilgar (2004-01-24 23:25) [7]2 BorH © (24.01.04 23:14) [5]
Жайворонок? Да, я имел ввиду Thread - поток.
Кстати на пару секунд можно и crHourGlass выдать.
← →
BorH (2004-01-24 23:29) [8]Эээээ... Два вопроса:
1. Чо за Жайворонок? Я, что-ли?
2. Чо за crHourGlass?
:))
← →
тихий вовочка (2004-01-25 11:02) [9]crHourGlass - стандартный курсор ожидания песочные часы. То есть тебе предлагают помимо Gauge намекнуть пользователю, что идет обработка
Screeen.Cursor:=crHourGlass;
....
Screeen.Cursor:=crDeafault;
← →
Юрий Зотов (2004-01-25 11:17) [10]> MadGhost
Если автомобиль не может ехать быстро, то это не потому, что у него маленькие колеса, а потому, что у него слабый мотор.
Знаете, к чему это? Вот к чему: если ProgressBar тормозит, то это не потому, что он медленно прорисовывается, а потому, что медленно работает то, что он отображает.
Выводы делайте сами.
← →
MadGhost (2004-01-25 13:12) [11]> Юрий Зотов
к сожалению это не так :) я тоже сначала над этим задумывался, потом все приложенеи переделал!!! 8-[] сначала работал TRegExpr, потом подумал что он медленный :(, переделал все что только можно на AnsiPos, Copy, Delete ниче не изменилось, потом у ProgressBar Smooth:=false; поставил, т.е. квадратиками заполнялся, стало чуть быстрее, после создания этой темки вспомнил про Gauge на панели Sample поставил, и все стало летать.
А что предшествовало, сделал абсолютно пустой цикл, в котором только устанавливается позиция ProgressBar"a, и работал он также медленно как выполнялась моя программа Ж8-[] адним словом кашмар. вот, так что калеса у ProgressBar маленькие.
← →
ЮЮ (2004-01-26 04:35) [12]>вспомнил про Gauge на панели Sample поставил, и все стало летать
И после этого он ищет компонент ? TGauge в Sample лежит по-прежнему :-)
← →
Думкин (2004-01-26 06:58) [13]> [11] MadGhost © (25.01.04 13:12)
Это вряд ли. Все-таки больше подозрений, что кривость в программе. Работа прогресбара должна быть вторична по отношению к программе, и если он ее тормозит - значит акцент где-то нарушен.
← →
sniknik (2004-01-26 08:33) [14]видимых (то что человек может заметить) перерисовок ProgressBar-а от силы сотня, больше вызывать изменения не имеет смысла. а на сотне вызовов заметить тормознутость нереально (ну не секунду же длится одна перерисовка).
если же цикл с большими числами то естественно будет тормозить (как и любоя другая отрисовка), т.к. отрисовка это довольно медленная операция.
← →
Юрий Зотов (2004-01-26 09:42) [15]> MadGhost © (25.01.04 13:12) [11]
Неужели Вы всерьез полагаете, что рисование двух-трех десятков квадратиков могло заметно замедлить Вашу программу?
← →
Anatoly Podgoretsky (2004-01-26 09:46) [16]По результатам испытаний, порядка 300 тысяч обновлений в секунду на средней машине.
← →
MadGhost (2004-01-26 22:23) [17]>Думкин © (26.01.04 06:58) [13]
> [11] MadGhost © (25.01.04 13:12)
>Это вряд ли. Все-таки больше подозрений, что кривость в >программе. Работа прогресбара должна быть вторична по >отношению к программе, и если он ее тормозит - значит акцент >где-то нарушен.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ProgressBar1: TProgressBar;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
ProgressBar1.Max:=300000;
for i:=0 to 300000 do
ProgressBar1.Position:=i;
end;
end.
ну разве это кривая программа? выполнялась примерно 16 секунд, считал про себя, но примерно так +- 1..2 секунды.
вместо ProgressBar1 поставил Gauge1 заполняется меньше секунды, гдето 0,2..0,4 секунды еси на глаз.
или это только у меня так? хотя я пишу на двух компах, на обоих WinXP, Delphi6. Правда на работе Пень-4, там чуть чуть быстрее, при чем после того как до середины дойдет, замедляется :(
проверял на трех компах, на вин98 уже готовое приложение работало, так медленно ужас просто.
← →
Anatoly Podgoretsky (2004-01-26 22:45) [18]15 000 раз в секунду, это разве мало?
← →
Anatoly Podgoretsky (2004-01-26 22:45) [19]Глаз у тебя конечно хороший, если в состоянии такую частоту разглядеть.
← →
MadGhost (2004-01-26 23:11) [20]:))
ну дак ведь какая разница между этими двумя компонентами, щас попробую реализовать ProgressBar наследуя от TPanel закрасить также в пустом цикле.
← →
Тимохов (2004-01-27 09:41) [21]Стандартная претензия к ВКЛ компонентам - медленные:((((
Да все будет медленно если по 300000 раз вызывать перерисовку.
сделай так
ProgressBar1.Max:=300000;
for i:=0 to 300000 do
if i mod 10000 = 0 then ProgressBar1.Position:=i;
будет, думаю, 0.01 сек работать, если не быстрее
← →
Anatoly Podgoretsky (2004-01-27 09:55) [22]При том, что скажем при ширине прогресс-бара в 300 пикселей из каждой 1000 перерисовок, 999 раз будет перерисовываться старая картинка и только один раз новая, когда длина полоски увеличится на один пиксель.
Рисовать надо только при реальном изменении, а для этого надо уметь использовать две функции div и mod
← →
y-soft (2004-01-27 10:07) [23]Если посылать с огромной скоростью 300000 сообщений окну ProgressBar, то заглючит даже не перерисовка, а обработка очереди сообщений. А так как, похоже, система использует для этого SendMessage, то будет тормозить вообще все...
← →
Юрий Зотов (2004-01-27 13:57) [24]> MadGhost © (26.01.04 22:23) [17]
> ну разве это кривая программа
Как видите из [21..23] - да, кривая.
← →
MadGhost (2004-01-27 17:46) [25]парни спасибо Вам большущее :) убедили меня в моей криворукости, впредь буду максимально объективней относиться к написанию кода :))
ещё раз большое спасибо, тяперь я понял в чем грябля зарыта.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.03 c