Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2012, 18:54   #1
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
Радость idhttp + memo - вопрос быстродействия

Добрый вечер!

Такая ситуация - с помощью метода get компонента idhttp получаю код страницы и заношу его в memo. Выходит около 4 тысяч строк.
Обработка самого кода в memo не занимает у меня много времени.
Всего заношу около 202 страниц в memo.
Хочется как-либо сократить время затрачиваемое программой на получение кода и в последующем внесением его в компонент memo - основная задержка по работе программы заключается именно в этом. Это возможно?
Я думаю что есть альтернативные варианты для реализации моей задачи, но пока что мой багаж знаний еще маловат, если такие существуют и они позволят скоратить время обработки, пожалуйста просветите

Благодарю!

Последний раз редактировалось Базиля; 01.08.2012 в 21:27.
Базиля вне форума Ответить с цитированием
Старый 01.08.2012, 19:27   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

ну я не уверен. но может стоит покопать в сторону winsock? не думаю что будет намного быстрее, не уверен что вопше будет быстрее) но попробовать можнО))
Pein95 вне форума Ответить с цитированием
Старый 01.08.2012, 19:31   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Pein95
Как раз прочитал, буквально пару минут назад, статью на эту тему
Опробую чуть позже этот вариант.
Может действительно выходит так что в данном случае за секундами не угонишься?
Базиля вне форума Ответить с цитированием
Старый 01.08.2012, 20:08   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Откажись от мемо. Хранить можно в строке или TStringList, если методы оттуда какие-нить нужны. Если мемо всё=таки нужен, то его можно привязать к TStringList в самом конце работы.
eoln вне форума Ответить с цитированием
Старый 01.08.2012, 20:42   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

eoln
Извиняюсь, забыл уточнить.
Использовал также список строк, результаты по времени оказались одинаковыми.
Насчет строк, их ведь никак тут не применить. Ведь метод get возвращает сразу целиковый код страницы объемом около 4тысяч строк.
P.S. Маленькое НО, пользуюсь компонентом memo из пака TMS. Особо сущей роли конечно не играет, но все-таки.

Последний раз редактировалось Базиля; 01.08.2012 в 20:48.
Базиля вне форума Ответить с цитированием
Старый 01.08.2012, 21:06   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

setwindowtext(или setwindowcaption или sendmessage) так вроде можно попробовать, не уверен что быстрей будет если вообще будет
Кольша вне форума Ответить с цитированием
Старый 01.08.2012, 21:09   #7
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Несколько перечитал первый пост, но не понял что собственно просят ускорить ))
Будем рассуждать логически: как я понимаю, процесс состоит из 3 шагов:
1) получение // ускорение интернета
2) обработка // что за обработка какого-то кода я так и не понял ))
3) вывод в memo // вот тут могу помочь

Ускорение memo:
И в простейшем случае отказываться от memo совсем необязательно. Просто на время всех операций с memo остановить в нем отрисовку/обработку всех событий:

Код:
memo.Lines.BeginUpdate;
...
memo.Lines.Clear;
memo.Lines.Add('Any String');
...
memo.Lines.EndUpdate;  // Прорисует все внесенные изменения
Эти методы в любом наследнике TStrings (и в том числе в TStringsList).
Примеры использования можно тут найти:
http://docwiki.embarcadero.com/CodeE...n_%28Delphi%29
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 01.08.2012, 21:23   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

InternetStranger
Цитата:
но не понял что собственно просят ускорить ))
Собственно проблема у меня заключается в том, что сам момент получения кода страницы и внесение его в memo поле, занимает достаточно времени.
Как пример, просто на загрузку кода 100 страниц, одну за другой в мемо, занимает около 18 секунд.
У меня стоит задача получать код 600 страниц - занимает достаточное время
Отсюда у меня возникает вопрос, есть ли возможность ускорить процесс?

Цитата:
2) обработка // что за обработка какого-то кода я так и не понял ))
Ну я ведь в дальнейшем работаю с полученным кодом страницы Под кодом я подразумевал сам код страницы получаемый методом get.
Это я и имел ввиду.

Цитата:
И в простейшем случае отказываться от memo совсем необязательно. Просто на время всех операций с memo остановить в нем отрисовку/обработку всех событий:
Компонент скрыт
Но все равно опробовал этот момент - ничего не изменилось

Кольша
Цитата:
setwindowtext(или setwindowcaption или sendmessage) так вроде можно попробовать, не уверен что быстрей будет если вообще будет
Каким образом мне помогут эти функции?
Я так и не понял.
Базиля вне форума Ответить с цитированием
Старый 01.08.2012, 21:37   #9
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Код:
Компонент скрыт
Не совсем понял к чему вы это )) там помимо визуальных функций куча обработчиков/событий при каждом добавлении строки.

Значит дело в скорости загрузки. Тут однозначно ускоритель интернета нужен. Получение за один запрос происходит? (Если несколько, то выручит объединение запросов).

Если запрос один, и длится так долго, то тут gzip-сжатие в несколько раз поможет уменьшить объем получаемого трафика. Только вот не уверен какая библиотека может с ним работать. Навскидку стоит попробовать Synapse, CURL...

-----------
UPD:
Код:
Каким образом мне помогут эти функции? Я так и не понял.
И не поймете пока не поймете какой из этапов занимает большую часть времени. Замерьте время выполнения отдельных шагов и сформулируйте конкретный вопрос.
Вот например с использованием GetTickCount.
Кстати "600 строк" это сколько в мегабайтах ?
PS: Тут все пытаются помочь ускорить третий шаг, когда проблема скорее всего в первом.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.

Последний раз редактировалось InternetStranger; 01.08.2012 в 21:43. Причина: добавлено сообщение
InternetStranger вне форума Ответить с цитированием
Старый 01.08.2012, 21:43   #10
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Не совсем понял к чему вы это )) там помимо визуальных функций куча обработчиков/событий при каждом добавлении строки.
Не знал.
Я думал что это относится только к визуальному оформлению

Цитата:
Тут однозначно ускоритель интернета нужен.
А это что за монстр такой ?

Цитата:
Значит дело в скорости загрузки. Тут однозначно ускоритель интернета нужен. Получение за один запрос происходит? (Если несколько, то выручит объединение запросов).
Что вы подразумеваете под одним запросом или несколько?
Вот как у меня обустроено:
Код:
for i := 1 to 100 do
memo1.lines.Text:=idhttp1.Get('url');
Цитата:
Если запрос один, и длится так долго, то тут gzip-сжатие в несколько раз поможет уменьшить объем получаемого трафика. Только вот не уверен какая библиотека может с ним работать. Навскидку стоит попробовать Synapse, CURL...
Про Synapse что-то слышал. Спасибо. Прочту информацию о нем подробнее.
Базиля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос о работе с IdHTTP knopkodaf Работа с сетью в Delphi 0 26.05.2012 19:02
Вывод информации memo с компонентом (idhttp) Arsenx777 Работа с сетью в Delphi 4 17.03.2011 13:19
Вопрос быстродействия _Денис C++ Builder 1 14.11.2009 17:00
[Вопрос] IdHttp в несколько потоков TilerDerton Работа с сетью в Delphi 3 22.09.2009 22:14
Вопрос по IdHTTP клиент DHK Работа с сетью в Delphi 4 12.01.2009 22:05