Форум: "Начинающим";
Текущий архив: 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