Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация скорости вывода на екран с помощью Label [D7, XP]


Страницы:   1 2 3

GVas ©   (2009-01-04 14:53:00) 

Добрый день.
На форме вывожу информацию вот так

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
 For i:=1 to 100000 do
   Begin
     Label1.Caption:=IntToStr(i);
     Label1.Refresh;
   End;
end;

оптимальна ли с точки быстродействия такая конструкция, потому как на довольно мощном компе такая по сути простая операция занимает довольно много времени (8 секунд где-то (или 200000 тактов процессора на одно обновление значения)) и заметил что в некоторых случаях загружаются разные ядра процессора (но одновременно только одно). Спасибо за ответы.


AndreyV   (2009-01-04 18:00:00) [41]

> [8] GVas ©   (04.01.09 17:53)

Раз в неделю появляется этот вопрос
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


GVas   (2009-01-04 17:53:00) [42]

Мдя, все извините за беспокойство оказалось что real48 мало знаков в числе поддерживает, значит ли это что если прибавлять к очень большому числу очень маленькое, будет погрешность??


GVas   (2009-01-04 17:47:00) [43]

Вот решил проверить как работает математика в делфе взял вещественное число 1Е-17 прибавил его 100000 раз получается 9,99999988197267E-13 а должно быть 1е-12 почему такая разница получается????


{RASkov}   (2009-01-04 17:30:00) [44]

> а такая же функция для вещественных чисел присутствует??

Да, FloatToStr()

> нельзя нажать на какую либо другую кнопку, как выйти из
> такого положения?

Application.Processmessage;
или доппотоки....


GVas   (2009-01-04 17:26:00) [45]

Спасибо за ответ, все понятно, но если можно еще один вопрос есть IntToStr а такая же функция для вещественных чисел присутствует?? и еще момент при работе цикла нельзя нажать на какую либо другую кнопку, как выйти из такого положения?


AndreyV   (2009-01-04 16:47:00) [46]

> [3] sniknik ©   (04.01.09 16:34)

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


sniknik   (2009-01-04 16:34:00) [47]

> или я занимаюсь ерундой
занимаешься ерундой, но вовсе не из за скоростей процессора, а из-за того что пытаешься оптимизировать то, что в этом не нуждается... ->
лебел, как и другие компоненты предназначенные для отображения, они для юзера, т.е. чтобы юзер видел инфу, а юзер физически не может реагировать так быстро... т.е. достаточно выводить только то что он способен заметить и осознать, и если инфа будет меняться раз в пол секунды этого будет достаточно... и для этого на всю твою проверку достаточен всего 1 вызов (и он останется одним даже если цикл еще на пару порядков увеличить)... и какая нужна оптимизация одного вызова? а она реально нужна в данном случае всего одна при правильной логике.
понятно что у тебя там будут еще вычисления, но... какую долю времени займут обновления интерфейса. если отображать только достаточное для юзера?
вот например чтобы вызвать 100000 раз (в нормальном варианте) у тебя вычисления должны идти 14 часов... и что в этой доле будут занимать 8 сек?


GVas   (2009-01-04 16:03:00) [48]

ну мб я просто неправильно выразил мысль но существует ли в делфи способ вывода на экран отличный от Label, но работающий быстрее брал я 100000 просто для того чтобы приблизительно высчитать скорость вывода на экран и даже если взять Label1.Caption:=IntToStr(100000) то это получатся почти те же самые 200к тактов процесора (чуть меньше) а если программа каждую секунду обновляет пару сотен таких Label и перед этим обсчитывает какие-то головоломные масивы информации хотелось бы немного оптимизировать работу. Подскажите, или я занимаюсь ерундой и на нынешних скоростях процессора это будет не очень заметно?


sniknik   (2009-01-04 15:08:00) [49]

> оптимальна ли с точки быстродействия такая конструкция
а подумать? ты там все цифры разглядеть успеваешь?

> 8 секунд
а вот такая

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
For i:=1 to 100000 do
  Begin
    //Label1.Caption:=IntToStr(i);
    //Label1.Refresh;
  End;
 Label1.Caption:=IntToStr(100000);
end;

0 сек. при том же конечном результате.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо