Главная страница
    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.044 c
14-1127454959
Тульский
2005-09-23 09:55
2005.10.16
Реклама ПО


1-1127730987
Laymer
2005-09-26 14:36
2005.10.16
Изображение иконки программы на кнопке.


1-1127731906
Voffka
2005-09-26 14:51
2005.10.16
FreeLibrary


14-1124894682
Marser
2005-08-24 18:44
2005.10.16
Опрос: Студенты и работа.


4-1124213393
SuperMatser
2005-08-16 21:29
2005.10.16
Кто нить работал с GetBKcolor? ничего не получается!!!!!!!!!!!!!!





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