Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.066 c
15-1265046351
Piter
2010-02-01 20:45
2010.08.27
Как вы относитесь к DB-Aware компонентам?


2-1270057433
pleasure
2010-03-31 21:43
2010.08.27
Профили меню в БД MSSQL


2-1271611512
Mishka
2010-04-18 21:25
2010.08.27
Отступ в начале DBEdit


15-1267107491
AlexDan
2010-02-25 17:18
2010.08.27
Подправить ява скрипт


2-1268604733
Mer01
2010-03-15 01:12
2010.08.27
Ошибка доступа к памяти (указатели)





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