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

Вниз

Скорость.... неужели конструктор так тормозит   Найти похожие ветки 

 
Bes ©   (2005-09-04 02:24) [0]

Иммется цикл... не очень большой порядка 3000 повторений.

Есть...

procedure _TClassName.ProcedureName;
 var
 i:integer;
  begin
       for i:=0 to self.Array_count-1 do
          begin
          .....
(1)          Какие-то действия с self.Array (массив)
         .....
          end;

  end;


Завершается практически моментально

а если сделать так...


procedure _TClassName.ProcedureName;
 var
 i:integer;
  begin
       for i:=0 to self.Array_count-1 do
          begin
          .....
(2)       TArrayClass.Create(self.Array);
         .....
          end;

  end;


Здесь (2) в конструкторе TArrayClass выполняются абсалютно теже действия с массивом что и в (1)

Но скорость выполнения поразительно изменилась... т.е. занимает все это стало чуть ли не минуту.

Действие с массивом банальные - чистое присвоение...

constructor TArrayClass.Create(array:TArray);
begin
 self.FirstElem:=array[0];
 self.SecondElem:=array[1];
 ....
end;


но если изменить код вот так...


procedure _TClassName.ProcedureName;
 var
 i:integer;
 AC:TArrayClass;
  begin
  AC:=TArrayClass.Create;
       for i:=0 to self.Array_count-1 do
          begin
             with AC do begin
              self.FirstElem:=array[0];
              self.SecondElem:=array[1];
             ....
             end;
          end;
AC.free;
  end;

и о класс... все работает быстро так же как и в первом примере...

Неужеле КОНСТРУКТОР ТАК СИЛЬНО ЗАГРУЖАЕТ ПРОЦ? у меня кстати не слабая машинка-то - PIV 3.2Mhz...

меня глючит?


 
kami ©   (2005-09-04 02:47) [1]

3000 раз создать экземпляры класса, ни разу не уничтожить :))
Попробуй объявить конструктор как Create(var array:TArray); (или const)


 
Германн ©   (2005-09-04 03:17) [2]

1.Неполная правда, гораздо жуже полной лжи!
2.Надергав несколько кусков из программы, не представишь её!


 
Defunct ©   (2005-09-04 05:14) [3]

Зачем так часто пишешь self? какая в этом необходимость?


 
Bes ©   (2005-09-04 12:54) [4]

теперь дайвайте начнем меня упрекать что я забыл ";" расставить...

вопрос снят....


 
Гаврила ©   (2005-09-04 14:26) [5]

Не конструктор загружает процесс, а операция выделеня памяти.
Ты в цикле 3000 раз выделяешь память под объект TArrayClass - это и является причиной задержки


 
Суслик ©   (2005-09-04 19:44) [6]


>  [3] Defunct ©   (04.09.05 05:14)
> Зачем так часто пишешь self? какая в этом необходимость?

такое ощущение, что человек из java пришел :) Там это часто делают.
Простите за оффтоп.


 
Defunct ©   (2005-09-04 21:08) [7]

> Суслик

imho, чел основательно запутался в собственном коде как раз из-за self. Ведь.

constructor TArrayClass.Create(array:TArray);
..
self.FirstElem:=array[0];

абсолютно не равно этому:

procedure _TClassName.ProcedureName;
..
 with AC do begin
    self.FirstElem:=array[0];

Во втором случае self ведь указывает на _TClassName, а не на TArrayClass.


 
vidiv ©   (2005-09-06 05:34) [8]

судя по тому что ты TArrayClass.Create(self.Array) ничему не присваиваешь, полученый объект тебе не нужен, тогда попробуй так:
procedure _TClassName.ProcedureName;
var
i:integer;
 begin
      for i:=0 to self.Array_count-1 do
         begin
         .....
         with TArrayClass.Create(self.Array) do Free;
        .....
         end;

 end;



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

Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.059 c
14-1127490900
YurikGL
2005-09-23 19:55
2005.10.16
Американские русофобы


2-1127212304
ZSergey
2005-09-20 14:31
2005.10.16
Как получить значение ...


1-1127331084
Ezh
2005-09-21 23:31
2005.10.16
Создание указателя на экземпляр класса


1-1127354970
DmiSb
2005-09-22 06:09
2005.10.16
Каким образом можно отобразить псевдографику ?


14-1127569018
GanibalLector
2005-09-24 17:36
2005.10.16
ОБЗОР решений





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