Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.11.2022, 09:09
vectorj vectorj вне форума
Прохожий
 
Регистрация: 29.11.2016
Сообщения: 5
Версия Delphi: Rad Studio XE2
Репутация: 10
По умолчанию Помогите с утечкой памяти

Суть, есть отдельная процедура, которая "выцепляет" отдельные элементы HTML страницы, которая сохранена в файл. Но после каждой ее отработки увеличивается количество занимаемой ОЗУ (Хотя по идее после процедуры все переменные удаляются), код ниже:

Код:
var idoc: IHTMLDocument2;
    V: OleVariant;
    HTML,html_str,str,str2: String;
    i,j,k:integer;
    Element: mshtml.IHTMLElement;
begin
  AssignFile(f,FileName);
  reset(f);
  while not eof(f) do
  begin
    readLn(f,str);
    html:=html+str;
  end;
  CloseFile(f);

  v:=VarArrayCreate([0,0],VarVariant);
  v[0]:= HTML;
  idoc:=coHTMLDocument.Create as IHTMLDocument2;
  idoc.write(PSafeArray(System.TVarData(v).VArray));// Эта строчка и есть утечка памяти
end;
 idoc.clear
Админ: Пользуемся тегами при оформлении кода!





не помогло, в чем может быть дело?

Последний раз редактировалось Admin, 15.11.2022 в 09:47.
Ответить с цитированием
  #2  
Старый 15.11.2022, 23:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не факт, что утечка есть. Просто память может не освобождаться менеджером памяти, поэтому кажется, что утечка есть.
Для начала, в конце добавь строки:
Код:
idoc := Nil;
VarClear(v);
v := Nil;
Это принудительно подскажет COM подсистеме освободить соотв интерфейс и уничтожить соотв. класс.
Далее, если Делфи достаточно свежая, то там по умолчанию используется иенеджер FastMM. В нем можно включить отслеживание утечек и, если они есть, при закрытии программы он, менеджер, выведет соотв. сообщение. Для этого в главном модуде добвть секцию инициалищации с установкой соотв. переменной:
Код:
initialization
  ReportMemoryLeaksOnShutdown := True;
Ну а далее надо будет уже смотреть более подробно.
Ответить с цитированием
  #3  
Старый 16.11.2022, 12:32
vectorj vectorj вне форума
Прохожий
 
Регистрация: 29.11.2016
Сообщения: 5
Версия Delphi: Rad Studio XE2
Репутация: 10
По умолчанию

Код:
v := Nil;
Не применим к типу OleVariant...

Последний раз редактировалось vectorj, 16.11.2022 в 12:36.
Ответить с цитированием
  #4  
Старый 16.11.2022, 23:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от vectorj
Код:
v := Nil;
Не применим к типу OleVariant...

А-а-а... ну да, там же спец значение, то ли None, то ли VarNone.
В принципе, это уже не обязательно, после VarClear, объект создан на стеке, так что при выходе из процедуры будет уничтожен.

Что там с репортом от менеджера памяти?
Ответить с цитированием
  #5  
Старый 19.11.2022, 10:04
vectorj vectorj вне форума
Прохожий
 
Регистрация: 29.11.2016
Сообщения: 5
Версия Delphi: Rad Studio XE2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
А-а-а... ну да, там же спец значение, то ли None, то ли VarNone.
В принципе, это уже не обязательно, после VarClear, объект создан на стеке, так что при выходе из процедуры будет уничтожен.

Что там с репортом от менеджера памяти?

Оказалось глюки WIN7, на WIN10 и WIN11 все работает как надо, и репорт от менеджера памяти не всплывает после закрытия приложения. В общем, проблема решена.

PS пишу парсер Авито с возможностью отправки в телегу. Пока работает.
Ответить с цитированием
  #6  
Старый 20.11.2022, 04:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее не Win7, а компонента от мелкомягких, может быть достаточно обновить IE или еще какую библиотеку. А что, на Win7 менеджер памяти ругается при закрытии программы, а на Win10 нет?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter