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

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

Замена Chart - графика для слабых компьютеров? [D7, 95/98, XP]


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

Who_are_you? ©   (2014-04-24 14:58:00) 

При запуске программы на старом компе Pentium II, Win 98, ОЗУ-128 MБ получил огромные тормоза.
Стал анализировать и выяснил - то что летало на новом компе.

Это Chart. Ждать приходится около 3 минут.
Заремил  с десяток строк, начинающиеся на  Chart, - выполнение 2 секунды.

Посоветуйте как быстро (в смысле времени выполнения компьютером и времени написания программы) сделать графическое представление (X,Y) цифровых данных?  Может у кого есть заготовки, Unit-ы ?


Германн   (2014-06-22 02:54:00) [1]


> Германн ©   (18.06.14 16:24) [45]
> Спасибо Вам за помощь.

Да не за что.
Если понадобится объяснить почему именно так нужно передавать параметр, тут найдутся люди, которые объяснят гораздо лучше чем я. Почти "в стихах". :)
Разве что будет неопределенность с терминами.


Who_are_you?   (2014-06-21 12:30:00) [2]

Who_are_you? ©   (20.06.14 16:13) [54]

Германн ©   (18.06.14 16:24) [45]
Спасибо Вам за помощь.

Сейчас делаю так:
File_rd :array of byte;  //дин. матрица
...
 Resul:=ReadFile(hInFile,File_rd[0],N_strok_File*8,Bytes,nil);

далее делаю математ. вычисления, запоминаю в:
 BitMap1.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin1*m1));
 BitMap2.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin2*m2));
 BitMap3.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin3*m3));
 BitMap4.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin4*m4));

и обработав 32кб строк, отображаю
 Canvas.draw(8,42,BitMap1);                //отрисовываем сам bitmap1
 Canvas.draw(8,43+BitMap2.Height,BitMap2);  //отрисовываем сам bitmap2
 Canvas.draw(8,44+2*BitMap3.Height,BitMap3);  //отрисовываем сам bitmap3
 Canvas.draw(8,45+3*BitMap4.Height,BitMap4);  //отрисовываем сам bitmap4

Если в начале темы я писал, что
> Ждать приходится около 3 минут.
,
то сейчас чтение файла, математ. вычисления, отображение проходит за 5 секунд.

Если кто может  предложить еще как повысить быстродействие - буду рад.

Для примера: оболочка Делфи 7 появляется на экране через ~3 минуты после нажатия Enter. (Уточненные данные)


reonid   (2014-06-20 17:06:00) [3]

>вывод графика идет с тормозами
а ты число точек варьировал? - у меня в примере 100000 стояло.

>Нужны 4 чарта.

Это примерно так:

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls,

 DoubleFn, DoubleOp, StdAlgs,
 RTypes, RCore, RSeries, RZoom, RTool, _newArea,
 PlotCol;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Timer1: TTimer;
   Panel2: TPanel;
   Panel3: TPanel;
   Panel4: TPanel;
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   FArea1: TRNewWorkArea;
   FArea2: TRNewWorkArea;
   FArea3: TRNewWorkArea;
   FArea4: TRNewWorkArea;

   FSeries1: TRSeries;
   FSeries2: TRSeries;
   FSeries3: TRSeries;
   FSeries4: TRSeries;
   FPhaseShift: Double;
   procedure FillAllSeries;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure FillSeries(Ser: TRSeries; N: Integer; Phase: Double);
var i: Integer;
begin
 Ser.Resize(N);
 for i := 0 to Ser.Length-1 do
 begin
   Ser.X[i] := i;
   Ser.Y[i] := Sin(i*0.05 + Phase);
 end;
 //ForEach(Ser.GetArrayAdapter('y'), TUnaryOp.AddGaussianNoise(0.1));
end;

procedure TForm1.FillAllSeries;
begin
 FillSeries(FSeries1, 1000, FPhaseShift);
 FillSeries(FSeries2, 1000, FPhaseShift+1);
 FillSeries(FSeries3, 1000, FPhaseShift+2);
 FillSeries(FSeries4, 1000, FPhaseShift+3);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FArea1 := TRNewWorkArea.CreateEx(Self, Panel1, alClient);
 FArea1.SetGlobalTool(ZoomTool);
 //FArea1.SetGlobalTool(EditTool);

 FArea2 := TRNewWorkArea.CreateEx(Self, Panel2, alClient);
 FArea3 := TRNewWorkArea.CreateEx(Self, Panel3, alClient);
 FArea4 := TRNewWorkArea.CreateEx(Self, Panel4, alClient);

 FSeries1 := TRSeries.CreateEx(FArea1.Layer.Root, '', clBlack);
 FSeries2 := TRSeries.CreateEx(FArea2.Layer.Root, '', clRed);
 FSeries3 := TRSeries.CreateEx(FArea3.Layer.Root, '', clBlue);
 FSeries4 := TRSeries.CreateEx(FArea4.Layer.Root, '', clGreen);
 //FSeries1.FastMode := True;  for more than 10000 points

 FillAllSeries;

 FArea1.ZoomOut;
 FArea2.ZoomOut;
 FArea3.ZoomOut;
 FArea4.ZoomOut;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 FillAllSeries;
 FPhaseShift := FPhaseShift + 0.3;

 //FArea1.ZoomOut;
 FArea1.Refresh;
 FArea2.Refresh;
 FArea3.Refresh;
 FArea4.Refresh;
end;

end.


Who_are_you?   (2014-06-20 16:50:00) [4]

reonid ©   (20.06.14 16:00) [53]

>Ваш fastChart на один график работает.
В смысле не тормозит? или просто удалось запустить?
>А на 2-ва, тем более на 4-е графика  у меня не получилось.
Нужны 4 чарта или 4 серии на одном чарте?


Подробности такие:
вывод графика идет с тормозами,
сдвиг графика на нормальном компе - это доли секунды, а на указанном в начале темы - около 12 секунд.

Нужны 4 чарта.


Who_are_you?   (2014-06-20 16:13:00) [5]

Германн ©   (18.06.14 16:24) [45]
Спасибо Вам за помощь.

Сейчас делаю так:
File_rd :array of byte;  //дин. матрица
...
  Resul:=ReadFile(hInFile,File_rd[0],N_strok_File*8,Bytes,nil);

далее делаю математ. вычисления, запоминаю в:
  BitMap1.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin1*m1));
  BitMap2.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin2*m2));
  BitMap3.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin3*m3));
  BitMap4.Canvas.LineTo(x0+Round(Time_Visibl*mx),y0-Round(Uin4*m4));

и обработав 32кб строк, отображаю
  Canvas.draw(8,42,BitMap1);                //отрисовываем сам bitmap1
  Canvas.draw(8,43+BitMap2.Height,BitMap2);  //отрисовываем сам bitmap2
  Canvas.draw(8,44+2*BitMap3.Height,BitMap3);  //отрисовываем сам bitmap3
  Canvas.draw(8,45+3*BitMap4.Height,BitMap4);  //отрисовываем сам bitmap4


Если в начале темы я писал, что
> Ждать приходится около 3 минут.
,
то сейчас чтение файла, математ. вычисления, отображение проходит за 5 секунд.

Если кто может  предложить еще как повысить быстродействие - буду рад.

Для примера: оболочка Делфи 7 появляется на экране через ~1.5 минуты после нажатия Enter.


reonid   (2014-06-20 16:00:00) [6]

>Ваш fastChart на один график работает.

В смысле не тормозит? или просто удалось запустить?

>А на 2-ва, тем более на 4-е графика  у меня не получилось.

Нужны 4 чарта или 4 серии на одном чарте?


Who_are_you?   (2014-06-20 14:50:00) [7]

reonid ©   (18.06.14 22:00) [50]
Ваш fastChart на один график работает.
А на 2-ва, тем более на 4-е графика  у меня не получилось.


Who_are_you?   (2014-06-19 10:19:00) [8]

reonid ©   (18.06.14 22:00) [50]
Я послал на мэйл на list.ru, который у тебя под ником.


Спасибо, получил, разбираюсь.


reonid   (2014-06-18 22:00:00) [9]

Ссылка - это очень старая версия библиотеки,
точнее, её базовая часть.
Класса TRSeries, который я использую быстрой отрисовки, там нет.

Я послал на мэйл на list.ru, который у тебя под ником.


Who_are_you?   (2014-06-18 20:42:00) [10]

reonid?

Ссылка выше - это она?


Who_are_you?   (2014-06-18 20:39:00) [11]


Может, она и потянет (я не знаю, до какой степени
у тебя тормознутый комп)

Что за комп, я написал в начале.

В принципе, у меня есть библиотечка, которая на хорошем
компе нормально отображает несколько сигналов по миллиону точек
и при этом не слишком тормозит при паннинге.

Но она для внутреннего употребления,
поэтому нет никакой документации.

Если хочешь, пришлю.


Я бы посмотрел, что от меня требуется?
Здесь E-mail можно выкладывать?


й   (2014-06-18 20:35:00) [12]

reonid, не эта:
http://kladovka.net.ru/index.cgi?pid=viewprofile&rid=318
? или сильно обновленная версия?


reonid   (2014-06-18 18:23:00) [13]

В принципе, у меня есть библиотечка, которая на хорошем
компе нормально отображает несколько сигналов по миллиону точек
и при этом не слишком тормозит при паннинге.

Может, она и потянет (я не знаю, до какой степени
у тебя тормознутый комп)

Но она для внутреннего употребления,
поэтому нет никакой документации.

Если хочешь, пришлю.


Германн   (2014-06-18 16:24:00) [14]


> Who_are_you? ©   (18.06.14 16:15) [44]
> Одномерный динамический тоже просто через File_rd не заполнишь.
>

Это если не умеешь :)

Fail_rd :array of byte;  
...
SetLength(Fail_rd, 800);
Resul:=ReadFile(hInFile,Fail_rd[0],N_strok_File,Bytes,nil);


Who_are_you?   (2014-06-18 16:15:00) [15]

Одномерный динамический тоже просто через File_rd не заполнишь.

Если кто-нибудь предложит примеры текста программ, был бы весьма рад !!!


Германн   (2014-06-18 14:58:00) [16]


> Inovet ©   (18.06.14 14:56) [42]

А это уже не ко мне. :)


Inovet   (2014-06-18 14:56:00) [17]

> [41] Германн ©   (18.06.14 14:48)

Значит делаем одномерный и работаем с ним как с н-мерным.


Германн   (2014-06-18 14:48:00) [18]


> Jeer ©   (18.06.14 14:32) [40]
> Динамический N-мерный массив всегда можно логически представить
> одномерным.
> Исходи из этого.

Только не динамический. Двумерный динмассив N*M размещен в N разных областях памяти размером M.


Jeer   (2014-06-18 14:32:00) [19]

Динамический N-мерный массив всегда можно логически представить одномерным.
Исходи из этого.


Who_are_you?   (2014-06-18 11:43:00) [20]

Согласен, хороший повод посмеяться.
Исправил на File_rd.

Изучаю, как вызовом ReadFile считать данные в двумерный динамический массив.
Если кто-нибудь предложит примеры текста программ, был бы весьма рад !!!


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

Наверх

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