Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
чудак   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
1-1089026451
ORMADA
2004-07-05 15:20
2004.07.18
Пакеты


9-1080631713
Michael Makushev
2004-03-30 11:28
2004.07.18
GLScene - is dead?


4-1086088462
lehich
2004-06-01 15:14
2004.07.18
отслеживание запуска программы


1-1089118524
Alex____
2004-07-06 16:55
2004.07.18
Подскажите быстрый компилятор Delphi пожалуйста


1-1088753591
Provodnick
2004-07-02 11:33
2004.07.18
Как вставить в Worde текст с новой страницы?





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