Главная страница
    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.035 c
1-1127716347
Shlomo
2005-09-26 10:32
2005.10.16
Web приложение???


3-1125991945
Tonich
2005-09-06 11:32
2005.10.16
Копировать Select из одной таблицы в другую


1-1127658051
bravo_elf
2005-09-25 18:20
2005.10.16
Нужна помощь с Delphi Architect 2005


1-1127225050
Германн
2005-09-20 18:04
2005.10.16
Ошибка Invalid File Name


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