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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2010, 13:19   #1
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию Утечка памяти при использовании DOM

Получаю все ссылки на странице способом которым кишит весь интернет:

Код:
procedure GetDom(const link: string; idHTTP: TIdHTTP);
Var
Code,temp: string;
Doc: IHTMLDocument2;
V: OleVariant;
HCol, LCol : IHtmlElementCollection;
HElem : IHtmlElement;
rez: TStringList;
begin
rez:=TStringList.Create;
Code:=IdHTTP.Get(link);
Doc:=coHTMLDocument.Create as IHTMLDocument2;
v:=VarArrayCreate([0, 0], VarVariant);
V[0]:=Code;
Doc.Write(PSafeArray(TVarData(V).VArray));
HCol:=Doc.All;
LCol:=HCol.Tags('A') as IHTMLElementCollection;
  for i:=0 to LCol.Length-1 do
  begin
    HElem:=LCol.Item(i,0) as IHtmlElement;
    temp:=HElem.getAttribute('href',0);
    temp:='/'+StringReplace(LowerCase(temp),'about:','' [rfReplaceAll,rfIgnoreCase]);
    temp:=StringReplace(LowerCase(temp),'blank','' [rfReplaceAll,rfIgnoreCase]);
    rez.Add(temp);
  end;

Result:=rez;
end;
При повторении этого кода в цикле память в диспетчере задач доходит до 170 мб. Конечно диспетчер задач не показатель но всё таки что то тут не ладно.
Ferrum26 вне форума Ответить с цитированием
Старый 13.08.2010, 13:44   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
rez:=TStringList.Create;
где удаление ?
Цитата:
Doc:=coHTMLDocument.Create as IHTMLDocument2;
где удаление ?
Цитата:
v:=VarArrayCreate([0, 0], VarVariant);
где удаление ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.08.2010, 14:14   #3
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

rez удаляется после вызова процедуры.
Doc и V вообще не имеют методов удаления
Ferrum26 вне форума Ответить с цитированием
Старый 13.08.2010, 14:23   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
rez удаляется после вызова процедуры.
После вызова уже не удалите.
Берете любой сборщик утечек и смотрите (хотя бы от того же JCL)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.08.2010, 14:45   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Может помочь.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Indy в потоке - утечка памяти PUH Фриланс 5 28.12.2009 14:06
Indy в потоке - утечка памяти PUH Помощь студентам 0 25.12.2009 12:27
Утечка памяти при работе с GDI+ Ivan_32 Общие вопросы C/C++ 2 29.11.2009 00:12
утечка памяти в С++ vengo Общие вопросы C/C++ 9 10.06.2008 21:24
DrawState - утечка памяти? unnamed Win Api 2 11.04.2007 18:36