Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизКласс/Компонет Найти похожие ветки
← →
tonich (2010-02-11 10:51) [0]Привет всем...
такой вот у меня вопрос.
есть класс, который, в ходе своей работы производит некоторые вычисления внутри себя и выдает их наверх результат. После того как я его написал и отладил, я решил его переделать в компонент, и просто создал еще один класс-обертку который, просто внутри себя создает первый класс и пользует его. Ну там было добавлено еще пару методов (конвертация полученных результатов, пару проверок на корректность вводимых данных), мелочи короче... После этого получилось такая странная штука.. Когда в проект используется компонент то время работы программы составляет порядка 7900 мс, когда же я использую просто первый класс без обертки компонентной, программа работает порядка 1800 мс. я пробовал уже в классе-обертке убирать все проверки и конвертации данных, ничего не меняется. Из-за чего может быть такая разница по времени в выполнении одного и того же кода , только в одном варианте на прямую а в другом варианте через компонент-обертку. ???
вот пример обертки
procedure TFastSolarSystem._GetVectorState(JD: Double; NTarget,
NCenter: Integer; InUnits: TUnit; var Vector: TCoordVector);
var
SV:TStateVector;
begin
inherited;
try
FillChar(Vector,SizeOf(Vector),0);
if not Factive then raise Exception.Create("Component is not active");
if Assigned(FBeforeCalculate) then FBeforeCalculate(Self);
if (JD>DE405.Header.ss[1]) or (JD<DE405.Header.ss[0]) then raise Exception.Create("Range JD date check error ");
DE405.StateVector(JD,NTarget-1,NCenter-1,@SV);
if Assigned(FAfterCalculate) then FAfterCalculate(Self);
case InUnits of
uAuDay:
begin
Vector[1] := SV[0]/DE405.Header.au; Vector[4] := SV[3]/DE405.Header.au;
Vector[2] := SV[1]/DE405.Header.au; Vector[5] := SV[4]/DE405.Header.au;
Vector[3] := SV[2]/DE405.Header.au; Vector[6] := SV[5]/DE405.Header.au;
end;
uKmSec:
begin
Vector[1] := SV[0]; Vector[4] := SV[3]/SecInDay;
Vector[2] := SV[1]; Vector[5] := SV[4]/SecInDay;
Vector[3] := SV[2]; Vector[6] := SV[5]/SecInDay;
end;
uReMin:
begin
Vector[1] := SV[0]/Re; Vector[4] := SV[3]/Re/MinInDay;
Vector[2] := SV[1]/Re; Vector[5] := SV[4]/Re/MinInDay;
Vector[3] := SV[2]/Re; Vector[6] := SV[5]/Re/MinInDay;
end;
uMtrSec:
begin
end;
end;
except
on Ex:Exception do MessageDlg(Ex.Message,mtInformation,[mbOK],0);
end;
end;
← →
tonich (2010-02-11 10:52) [1]да, вот это и есть вызов метода класса (который я первым написал)
DE405.StateVector(JD,NTarget-1,NCenter-1,@SV);
← →
Дмитрий Белькевич (2010-02-11 12:14) [2]
> Из-за чего может быть такая разница по времени в выполнении
> одного и того же кода , только в одном варианте на прямую
> а в другом варианте через компонент-обертку. ???
Из-за того, что код разный. Чудес, как известно, не бывает.
Как минимум вот этот процесс:
> просто внутри себя создает первый класс и пользует его
будет занимать какое-то время.
Обработчики прописаны? :
> if Assigned(FBeforeCalculate) then FBeforeCalculate(Self);
> if Assigned(FAfterCalculate) then FAfterCalculate(Self);
← →
tonich (2010-02-11 12:54) [3]ну если были описаны обработчики было бы вообще смешно сравнивать ))
я коментарил и обработчики и все проверки ... и зануление вектора... все...перед тем как сравнивать время работы
← →
Дмитрий Белькевич (2010-02-11 17:21) [4]Если закоментировать весь метод и его работа всё равно будет долгой, то, очевидно, проблема находится вне метода.
← →
Дмитрий Белькевич (2010-02-11 17:22) [5]inherited; ?
← →
tonich (2010-02-12 12:58) [6]нее компонент обертка над классном не является его наследником.. если вы про это..
← →
Плохиш © (2010-02-12 13:25) [7]Даю 100%, что проблема окажется в неуказанном отроске, обсуждаемого тут сферического коня в вакууме...
← →
tonich (2010-02-13 11:46) [8]
> Даю 100%, что проблема окажется в неуказанном отроске, обсуждаемого
> тут сферического коня в вакууме...
черт должен признать свою ошибку, ну отростка не было но оказалось другое ))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.054 c