Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-16321
real_dimedrol
2004-01-25 12:22
2004.02.06
Как получить Device Context для Memo?


9-16018
BoGoMoL
2003-07-18 20:46
2004.02.06
Поиск кратчайшего пути


3-16115
stud
2004-01-15 13:05
2004.02.06
возможно ли отображение в гриде вложенных таблиц


8-16530
AlexanderSK
2003-09-23 15:01
2004.02.06
Запись звука с микрофона


3-16102
Lonely
2003-12-16 12:12
2004.02.06
Програмное добавление поля в таблицу Paradox





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