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

Вниз

передавать или создавать заново   Найти похожие ветки 

 
NERO   (2009-10-20 18:35) [0]

Здравствуйте, уважаемые!
Подскажите пожалуйста, что эффективнее всего использовать, это:

procedure get_http;
var HTTP:TIdHTTP;
    s:TSringList;
begin
 ...
 HTTP:=TIdHTTP.create(nil);
 HTTP.HandleRedirects:=True;
 HTTP.ProtocolVersion:=pv1_0;
 s:=HTTP.Get("http://google.ru");  
 HTTP.Free;
end;

procedure some_proc;
begin
 while true do    // бесконечный цикл
 begin    
   get_http;    
   ...
 end;
end;

или все-таки вот это:

procedure get_http(const http:TIdHTTP);
var s:TSringList;
begin
 ...
 s:=HTTP.Get("http://google.ru");  
end;

procedure some_proc;
var HTTP:TIdHTTP;
begin
 HTTP:=TIdHTTP.create(nil);
 HTTP.HandleRedirects:=True;
 HTTP.ProtocolVersion:=pv1_0;
 while true do    // бесконечный цикл
 begin
   get_http(HTTP);  
   ...
 end;
 HTTP.Free;
end;

P.S. var s:TSringList в расчет не берем :)


 
DVM ©   (2009-10-20 18:40) [1]


> Подскажите пожалуйста, что эффективнее всего использовать,
>  это:

Один фиг по сравнению со скоростью выполнения HTTP.Get


 
NERO   (2009-10-20 18:53) [2]

Конечно с HTTP пример получился не совсем удачным, просто хотелось бы знать на будущее как эффективней распределяться с создаваемыми/уничтожаемыми классами. Например если прога будет бесконечно создавать/уничтожать класс не возникнет ли при этом утечки памяти когда нибудь? Если рассудить логичеки то напрашивается закономерный вопрос, зачем создавать и уничтожать класс, если заранее известно что этот класс нужно будет создавать вновь. И тут же напрашивается следующий вопрос а что собственно говоря происходит при передачи динамического класса? Происходит ли его повторное создание уничтожение в передаваемой процедуре или нет и не будет ли утечки памяти в этом случае?


 
TUser ©   (2009-10-20 19:51) [3]


> Например если прога будет бесконечно создавать/уничтожать
> класс не возникнет ли при этом утечки памяти когда нибудь?
>  

Если возникнет - значит класс написан неправильно. Так что лучше передавай, - ошибку (утечку) ты заметишь раньше. Имхо.


 
qwer_qwer   (2009-10-20 19:54) [4]


> И тут же напрашивается следующий вопрос а что собственно
> говоря происходит при передачи динамического класса?


Ты никогда не передаёшь в качестве параметра экземпляр класса. Передаётся ссылка на объект.
Соответственно, ни о каком автоматическом пересоздании не может идти


 
DVM ©   (2009-10-20 19:55) [5]


> Например если прога будет бесконечно создавать/уничтожать
> класс не возникнет ли при этом утечки памяти когда нибудь?
>

Если класс написан без ошибок, то максимум что возникнет - это фрагментация памяти. Другое дело, что класс может быть огромным и медленно создаваемым, тогда если критична скорость, то да, лучше может один раз его создать, если такое возможно. С другой стороны, создание и уничтожение класса по месту повышает автономность и назависимость отдельных частей кода. Короче оба варианта могут быть использованы к месту.


> И тут же напрашивается следующий вопрос а что собственно
> говоря происходит при передачи динамического класса?

В процедуру передается указательн на этот экземпляр класса, т.е. адрес где он расположен в памяти.


> Происходит ли его повторное создание уничтожение в передаваемой
> процедуре или нет и не будет ли утечки памяти в этом случае?
>

Нет конечно.


 
RWolf ©   (2009-10-20 19:56) [6]


> зачем создавать и уничтожать класс, если заранее известно
> что этот класс нужно будет создавать вновь.

незачем.
с другой стороны, заострять на этом внимание нужно только при необходимости оптимизации скорости выполнения рассматриваемого алгоритма, т.е. редко.


> а что собственно говоря происходит при передачи динамического
> класса? Происходит ли его повторное создание уничтожение
> в передаваемой процедуре или нет и не будет ли утечки памяти
> в этом случае?

в Delphi происходит передача ссылки на класс, на не класса.


 
NERO   (2009-10-20 20:02) [7]

Ответ на свой вопрос получил. Всем спасибо.


 
Дмитрий С ©   (2009-10-21 10:13) [8]

Хочется добавить еще try finally



Страницы: 1 вся ветка

Текущий архив: 2009.12.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1256332173
POOP
2009-10-24 01:09
2009.12.20
Как в bat файле выделить текущий каталог?


4-1225346049
xCode
2008-10-30 08:54
2009.12.20
CreateUserProcess


2-1257157663
Сергей
2009-11-02 13:27
2009.12.20
Как передать данные в CRReport.PrintOut


15-1256370619
Alex_ey
2009-10-24 11:50
2009.12.20
заедает звук в адоб аудишн 3


2-1257094427
Don
2009-11-01 19:53
2009.12.20
Как сделать компонент image1 на форме полупрозрачным