Главная страница
    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.064 c
15-1267824608
Юрий
2010-03-06 00:30
2010.08.27
С днем рождения ! 6 марта 2010 суббота


15-1275560855
Kerk
2010-06-03 14:27
2010.08.27
В России стартует эксперимент по имитации полета на Марс


2-1266751523
Fr
2010-02-21 14:25
2010.08.27
TRichEdit, вставка текста


2-1273221089
Savek
2010-05-07 12:31
2010.08.27
Объединение таблиц из раных баз


2-1266580325
NovichoK111
2010-02-19 14:52
2010.08.27
TreeView





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