Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

помогите освободить память!   Найти похожие ветки 

 
чудак   (2004-07-03 13:38) [0]

Необходимо:
Сделать график. Причём на одном графике могут быть несколько зависимостей отображаться (соответсвтенно, несколько серий). И должен быть выбор вида графика (либо диаграмма, либо кривая).
Выбор осуществляется по закладкам.

for i:=0 to N-1 do  (N - число кривых/диаграмм на одном графике)
 begin
  case Pagecontrol1.ActivePageIndex of
   0: begin
       Chart1.visible:=false;
       exit;
      end;
   1: begin
       Chart1.visible:=true;
       ls := TBarSeries.Create(nil);
       Chart1.AddSeries(ls);
      end;
   2: begin
       Chart1.visible:=true;
       ll := TLineSeries.Create(nil);
       Chart1.AddSeries(ll);
      end;
  end;
  Chart1.Series[i].Marks.Visible := false;
  Chart1.Series[i].... (идёт код рисования графика и т.д.)
 end;

Всё бы хорошо - графики рисуются. Но вот при каждом перелистывании (код в обработчике PageControl1Change) - память динамически выделяется, но не очищается. EXEшник в памяти разрастается в размерах прямо на глазах (с 14 Мб я довёл перещёлкиваниями до 16 - и так можно до бесконечности).

Пожалуйста, если кому не трудно вникните в проблему и посоветуйте как в данном случае лучше очищать память. Знаю, что надо вставить код ls.free и ll.free - но куда? Если  сдлеать так:

  case Pagecontrol1.ActivePageIndex of
   0: begin
       Chart1.visible:=false;
       exit;
      end;
   1: begin
       Chart1.visible:=true;
       try    
        ls := TBarSeries.Create(nil);
        Chart1.AddSeries(ls);
       finally
        ls.free;
       end;
      end;
   2: begin
       Chart1.visible:=true;
       try  
        ll := TLineSeries.Create(nil);
        Chart1.AddSeries(ll);
       finally
        ll.free;
       end;
      end;

То начинаются ошибки как будто у меня не создано ни одной серии (там где обращаюсь к Chart1.Series[i] - возникает ошибка выходя из диапазона индексов серий, хотя i=0). Непонятно.. Я же сначала использую метод addseries, а потом очищаю ll.

Прошу помочь, а не пинать ногами если код слишком корявый или смешной. Заранее спасибо.


 
Семен Сорокин ©   (2004-07-03 13:54) [1]

добавь следующий код перед for i:=0 to N-1 do  

for _i := 0 to Chart1.SeriesCount-1 do
 Chart1.Series[_i].Free;

_i - переменная Integer


 
чудак   (2004-07-03 14:25) [2]

2 Семен Сорокин:
Спасибо, добавил. Только всё равно "раздувается" программа при перещёлкивании закладок. Я вот думаю - создаю я объекты с именем ll и ls - а очищаю Chart1.Series[i].. Или они после  Chart1.AddSeries(ls) занимают одинаковое место в памяти (с одинаковым адресом) и Chart1.Series[i].free эквивалентно ll.free?


 
Семен Сорокин ©   (2004-07-03 14:43) [3]


> Chart1.Series[i].free эквивалентно ll.free

в данном случае - да.

>Только всё равно "раздувается" программа при перещёлкивании >закладок

значит утечка в другом месте - если она есть, поищите программку MemProof она поможет найти где память теряется.


 
чудак   (2004-07-03 15:12) [4]

Кстати, пардон.. не работает таки метод:

"добавь следующий код перед for i:=0 to N-1 do  
for _i := 0 to Chart1.SeriesCount-1 do
 Chart1.Series[_i].Free;
_i - переменная Integer"

Почему-то возникает ошибка "List index out of bounds(1)". Посмотрел в отладке: "Chart1.Series[0].Free;" проходит нормально, а вот на "Chart1.Series[1].Free;" возникает ошибка.

Интересно почему это может быть?


 
чудак   (2004-07-03 15:13) [5]

P.S.  а вот на "Chart1.Series[1].Free;" возникает ошибка. Иммется в виду, что Chart1.SeriesCount = 2.


 
Семен Сорокин ©   (2004-07-03 15:14) [6]

ага тогда так :)))
for _i := Chart1.SeriesCount-1 downto 0 do
 Chart1.Series[_i].Free;


 
чудак   (2004-07-03 15:20) [7]

"ага тогда так :)))
for _i := Chart1.SeriesCount-1 downto 0 do
 Chart1.Series[_i].Free;"

Семен Сорокин, логика мне эта несовсем понятна, но ЗАРАБОТАЛО!!! :) Ни на байт теперь не раздувается. Спасибо большое :) Второй раз Вы мне помогаете (строчку  ls := TBarSeries.Create(nil); - по-моему, Вы же мне и подсказали с месяц назад ;)).



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
1-1089101589
Сергей_И
2004-07-06 12:13
2004.07.18
StringGrid удаление, вставка строк


14-1088489546
Mixan
2004-06-29 10:12
2004.07.18
Не могу скачать ни один исходник с сайта! В частности Гробницы 2


1-1089185904
Ларра
2004-07-07 11:38
2004.07.18
Передача данных из базы данных в EXCEL


14-1088166570
syte_ser78
2004-06-25 16:29
2004.07.18
Загадка для програмистов


1-1087807856
GrayFace
2004-06-21 12:50
2004.07.18
Assembler