Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TChart ест память? 
:(
    Опции темы
krik
Дата 4.9.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.7.2008

Репутация: нет
Всего: 1



Всем привет. Столкнулся с задачкой, чтобы вывести значения работы двигателя. Необходимо показывать значения за последние 30 секунд. На ум пришло решение положить TChart на форму и по таймеру с интервалом в 1 секунду добавлять значения в график. 

При создании формы проинициализировал основные параметры
Код

Chart1.View3D := false;
Chart1.AnimatedZoom := false;
Chart1.ScaleLastPage := true;
Chart1.Zoomed := false;
Chart1.AnimatedZoomSteps := 4;
Chart1.MaxPointsPerPage := 30;
Chart1.BottomAxis.Increment := DateTimeStep[ dtFiveSeconds ];
Chart1.BottomAxis.LabelsMultiLine := true;
Chart1.BottomAxis.DateTimeFormat := 'dd/mm/yy hh:mm:ss';
Chart1.BottomAxis.ExactDateTime := true;
Chart1.Series[0].XValues.DateTime := true;
Chart1.Series[1].XValues.DateTime := true;
Chart1.Series[2].XValues.DateTime := true;
Chart1.Series[3].XValues.DateTime := true;
Chart1.Series[4].XValues.DateTime := true;
Chart1.Series[5].XValues.DateTime := true;
Chart1.Series[6].XValues.DateTime := true;


В таймере добавляю для теста значения
Код

  Chart1.Series[0].AddXY(now,random(100));
  Chart1.Series[1].AddXY(now,random(50));
  Chart1.Series[2].AddXY(now,random(120));
  Chart1.Series[3].AddXY(now,random(75));
  Chart1.Series[4].AddXY(now,random(102));
  Chart1.Series[5].AddXY(now,random(100));
  Chart1.Series[6].AddXY(now,random(250));

  if Chart1.Series[0].XValues.Count > 30 then 
    begin         

      Chart1.BottomAxis.Maximum := Chart1.Series[0].MaxXValue + Sec;
      Chart1.BottomAxis.Minimum := Chart1.BottomAxis.Minimum + Sec;

      Chart1.Series[0].XValues.Delete(Chart1.Series[0].XValues.Count-31);
      Chart1.Series[0].YValues.Delete(Chart1.Series[0].YValues.Count-31);
      Chart1.Series[1].XValues.Delete(Chart1.Series[1].XValues.Count-31);
      Chart1.Series[1].YValues.Delete(Chart1.Series[1].YValues.Count-31);
      Chart1.Series[2].XValues.Delete(Chart1.Series[2].XValues.Count-31);
      Chart1.Series[2].YValues.Delete(Chart1.Series[2].YValues.Count-31);
      Chart1.Series[3].XValues.Delete(Chart1.Series[3].XValues.Count-31);
      Chart1.Series[3].YValues.Delete(Chart1.Series[3].YValues.Count-31);
      Chart1.Series[4].XValues.Delete(Chart1.Series[4].XValues.Count-31);
      Chart1.Series[4].YValues.Delete(Chart1.Series[4].YValues.Count-31);
      Chart1.Series[5].XValues.Delete(Chart1.Series[5].XValues.Count-31);
      Chart1.Series[5].YValues.Delete(Chart1.Series[5].YValues.Count-31);
      Chart1.Series[6].XValues.Delete(Chart1.Series[6].XValues.Count-31);
      Chart1.Series[6].YValues.Delete(Chart1.Series[6].YValues.Count-31);  
    end;


И в добавок 
Код

const
  Sec = 1 / (24 * 60 * 60);


Вроде бы все даже и работает. Но заметил одну не очень хорошую особенность (собственно почему и решил удалять значения). Что в менеджере процессов приложение понемножечку растет в оперативной памяти. Если отключаю таймер - все замерает на месте. За минут 5 набирается примерно 500 КБ.. вроде бы и не так много, но что-то надо делать. А а вдруг люди будут весь день с программой работать и что тогда? Посоветуйте что поправить! Использую Delphi XE6 Fire Monkey

Это сообщение отредактировал(а) krik - 4.9.2014, 12:47
PM MAIL   Вверх
krik
Дата 4.9.2014, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.7.2008

Репутация: нет
Всего: 1



Что-то совсем не пойму... Отключил добавление элементов.. Проверил что будет если просто понажимать на кнопки.. и пришел к выводу что походу буду делать проект на VCL а не Fire Monkey. Получилось что память увиличивается когда просто на кнопки нажимаешь.... Может я чего не понимаю?  smile  Плюс в VCL exe файл в 10 раз меньше и при нажимании на кнопки вообще ничего не увиличивается. Может кто сталкивался?
PM MAIL   Вверх
drkot
Дата 4.9.2014, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



не "добавлять" а пере присваивать значения.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.