![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет!
Итак, вопрос первый. Есть приложение. Там кучка переменных (инт, стринги, несколько стринглистов), Webbrowser, IdThhp, пара стринггридов. Прога работает круглосуточно. Страницы парсит. И вот после 10 часов непрерывной работы прога начинает жрать около 250 Мб оперативки. больше не жрет, но это всё равно перебор. Подскажите, может надо какие-то переменные уничтожать? или Webbrowser прибивать и заново открывать? А то у меня в проге тока Стринглисты CREATE тся и FREE (освобождаются). Да, и к этой же теме - как вообще в процессе работы програмы прибить WEbbrowser и потом открыть его как чистенький новенький компонент на форме? а то как прибить - знаю, а как назад вернуть - нет. И второй вопрос. Webbrowser у меня половину времени работы программы грузит какую-либо страницу. А пока он ее грузит - интерфейс программы практически не отвечает, не сворачивается, не разворачивается... Может как-то можно просто понизить приоритет компонента на форме? Если нет и надо делать отдельный поток - то подскажите плз на примере, как мне пользоваться этим отдельным потоком, просто передавая ему нужный URL, и выставить ему средний приоритет, чтобы не грузил мне всю программу. И последнее. Наверное не в тему вопроса, но все же. Как просто и быстро проверить наличие инета? буквально в одну строчку кода. |
#2
|
||||
|
||||
![]() 1.
*Оммм... получаю исходник телекинезом...* Проблема в строчке 59! ![]() 2. Периодический вызов Application.ProcessMessages? 3. Пингуй гугл ![]() Примеров пинга в инэте миллионы, пользуйся да хоть тем же гуглом ![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() Цитата:
Да не, я в общем хотел узнать, может какие переменные или компоненты в принципе отжирают память, если их не уничтожать... И еще. Application.ProcessMessages я вызываю регулярно, но в эту тему еще вопрос. Application.ProcessMessages sleep(5000); Application.ProcessMessages (это мне просто надо дать браузеру отстояться) Все эти 5 секунд моё приложение висит. Хотя 5 сек должно было просто постоять и нихрена не делать. ![]() Чё не так-то? А насчет пинга - это ладно, вопрос не такой уж принципиальный. Мне важнее про переменные и про sleep |
#4
|
||||
|
||||
![]() sleep(5000); в основном процессе - это действительно ничего не делать ( 5 сек ) даже не обрабатывать сообщения о нажатиях кнопок.
А Application.ProcessMessages - это как раз обработать все поступившие сообщения, в том числе и о нажатиях кнопок. |
#5
|
|||
|
|||
![]() Цитата:
Здорово! Осталось только решить, как мне тогда приостановить на 5 секунд выполнение программы, при этом РЕАГИРУЯ на все нажатия кнопок? Ну и самое главное - как понизить приоритет компонента webbrowser, чтобы не наглел и не вешал программу, пока страница грузится. Последний раз редактировалось romingood, 19.03.2010 в 18:57. |
#6
|
||||
|
||||
![]() Цитата:
Ты тогда расшифруй Цитата:
По поводу webbrowser - использовать другие средства для парсинга страниц ( заодно не будет грузиться хлам в виде картинок, флешь анимации, и прочих сторонних от Гугла, Яндекса ит.д ). |
#7
|
|||
|
|||
![]() Ладно, я понял.
Но ведь мне необходимо использовать веб-браузер на странице. Не только для парсинга, но и для нажатия Сабмит всяких Яваскрипленных кнопок и т.п. В общем без него никак. А стандартный веб-браузер как я и говорил, вешает мне прогу в процессе загрузки страницы. Что делать-то? Задачка вроде несложная. Или - как мне этот самый браузер в отдельный поток (tthread) выкинуть? чтобы передавать ему в поток URL для загрузки. И поставить ему приоритет ниже среднего. Или - какие еще есть варианты использования браузера в программе, но чтоб он не вешал прогу? |
#8
|
|||
|
|||
![]() Цитата:
Используй лучше следующую функцию, вместо выше написаного кода. Код:
procedure Delay(dwMilliseconds: Longint); var iStart, iStop: DWORD; begin iStart := GetTickCount; repeat iStop := GetTickCount; Application.ProcessMessages; until (iStop - iStart) >= DWORD(dwMilliseconds); end; |
#9
|
||||
|
||||
![]() А зачем для парсинга вообзе WebBrowser использовать? Понятно, что там на страничке надо кнопки жать и т.д. и т.п., а чисто на POST- GET-запросах никак не обойтись? Если сайт 1 или даже фиг с ним 10, но они определены и с них парсится инфа, то почему бы не изучить их в том плане, какой запрос и куда отправляется, что приходит в ответ и потом просто заюзать тот же idHTTP? По-моему так будет и правильнее и прога не будет так "ужираться" ресурсами
![]() Delphi в Internet - блог о программировании. Малоизвестные и редко обсуждаемые темы программирования на Delphi |
#10
|
||||
|
||||
![]() Цитата:
2 - Перед кодом "долгих" процедур добавляй Application.ProcessMessages; Делаю программы за очки репутации! |