Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1257016742
maxstarts
2009-10-31 22:19
2009.12.20
Программа виснет при скрытие вкладок pagecontrol ов


15-1255892869
POOP
2009-10-18 23:07
2009.12.20
Как в mathcad e решить линейное уравнение?


3-1231686479
Чайник
2009-01-11 18:07
2009.12.20
Метод Locate - проблема с апострофом в строке поиска


3-1231746313
zdm
2009-01-12 10:45
2009.12.20
Связь с MySQL используя SSH тунелирование


15-1255957108
TUser
2009-10-19 16:58
2009.12.20
"ЯБЛОКО" не признает результаты выборов 11 октября





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