Главная страница
    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.056 c
1-1127887687
tytus
2005-09-28 10:08
2005.10.16
Как в StringGrid-e рисовать перевернутый текст на 90 градусов?


2-1125850871
Lower_
2005-09-04 20:21
2005.10.16
Stringgrid


14-1127557420
alexbou
2005-09-24 14:23
2005.10.16
Delphi 2005 Update 4 Release Candidate ???


2-1126785349
Vad_
2005-09-15 15:55
2005.10.16
про грид


3-1125568545
AndrewK
2005-09-01 13:55
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский