Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Класс/Компонет   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.097 c
15-1270050200
Faiwer
2010-03-31 19:43
2010.08.27
ООБД


2-1275153874
Mishka
2010-05-29 21:24
2010.08.27
panel + statusbar(SizeGrip)


15-1270632270
Валерий М.
2010-04-07 13:24
2010.08.27
MySQl Server 4


15-1270742112
denis_stell
2010-04-08 19:55
2010.08.27
количество дней


8-1205755973
DoKi
2008-03-17 15:12
2010.08.27
gпопиксельное освещение