Главная страница
    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.039 c
14-1127748542
Карелин Артем
2005-09-26 19:29
2005.10.16
Вот и база жителей РФ!


3-1125926607
AndrewK
2005-09-05 17:23
2005.10.16
Хранение справочников в одной таблице. Предлагаю обсудить идею.


1-1127469976
tyo
2005-09-23 14:06
2005.10.16
Z-ордер окошек


3-1125912790
oradb
2005-09-05 13:33
2005.10.16
Вставка записи в таблицу


2-1127086320
antikaban
2005-09-19 03:32
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский