mylp
@mylp
php + js = site + crm

Как освободить память после использования IHTMLElement?

Для обработки интернет страниц используется компонент TImbeddedWB.
Открывается длинный перечень страниц (около 10000).
Далее ведется работа с DOM моделью документа посредством переменных типа IHTMLElementCollection и IHTMLElement.

Один из фрагментов кода:

tmpInputs := WB.GetDocument.all.tags('input') as IHTMLElementCollection;
	for i := 0 to tmpInputs.Length - 1 do
	begin
		tmpElement := tmpInputs.item(i, 0) as IHTMLElement;
		tmpS := tmpElement.getAttribute('name', 0);
		if tmpS = 'searched_name' then
		begin
			tmpElement.setAttribute('value', 'somevalue', 0);
			tmpFound := True;
			break;
		end;
	end;


При обработке большого количества страниц жрет память до 1,5 Гб и потом выдает ошибку выделения памяти.
Подскажите, как принудительно освобождать память не закрывая приложения и не ожидая по 10 минут?
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Зачем искать имя поля через коллекцию, да еще и через DOM?!
Нельзя просто пропарсить страницы через Source+Regex?
А уже потом - выставить?

Не юзайте for при коллекциях. Юзайте while-do и освобождайте память на каждом цикле через метод удаления объекта из коллекции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы