Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 811

/ вопрос открыт /

Вечер добрый.

Сложность в поиске утечки памяти. Сама программа работает, но ее объем в ОП увеличивается просто невероятными темпами. Раньше никогда на подобное не обращал внимания, но сейчас без этого не обойтись. Хотелось бы спросить совета, вообще на что обращать внимание. Первое что вспомнил - это про деструкторы и закрытие файлов. Код прилагается.

Зы: установил FastMM4, но при разблокировании параметров выдает :
[Error] FastMM4Options.inc(126): Declaration expected but number found
на параметре $define FullDebugMode.
Заранее спасибо.

Приложение:
  1. //------------------------------------------------------------------------------
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. var
  4. i: integer;
  5. WordList: TStringList;
  6. Document: IHTMLDocument2;
  7. begin
  8. //--
  9. TopList:=TStringList.Create;
  10. BottomList:=TStringList.Create;
  11. TopList.LoadFromFile('CSS/Template_top.html');
  12. BottomList.LoadFromFile('CSS/Template_bottom.html');
  13. //--
  14.  
  15. WordList:=TStringList.Create;
  16. WordList.LoadFromFile('base/IrVerb.txt');
  17. for i:=0 to WordList.Count-1 do
  18. begin
  19. DoingFile(WordList[i]);
  20. end;
  21. WordList.Free;
  22. TopList.Free;
  23. BottomList.Free;
  24. end;
  25. //------------------------------------------------------------------------------
  26. procedure TForm1.SaveHTMLSourceToFile(const FileName: string;
  27. WB: TWebBrowser);
  28. var
  29.  
  30. PersistStream: IPersistStreamInit;
  31. FileStream: TFileStream;
  32. Stream: IStream;
  33. SaveResult: HRESULT;
  34. begin
  35. PersistStream := WB.Document as IPersistStreamInit;
  36. FileStream := TFileStream.Create(FileName, fmCreate);
  37. try
  38. Stream := TStreamAdapter.Create(FileStream, soReference) as IStream;
  39. SaveResult := PersistStream.Save(Stream, True);
  40. if FAILED(SaveResult) then
  41. MessageBox(Handle, 'Fail to save HTML source', 'Error', 0);
  42. finally
  43. FileStream.Free;
  44. end;
  45.  
  46. end;
  47. //------------------------------------------------------------------------------
  48. procedure TForm1.DoingFile (Name: string);
  49. var
  50. FileName: string;
  51. begin
  52. Edit1.text:='http://lingvo.yandex.ru/'+Name+'/ñ%20àíãëèéñêîãî/';
  53. WebBrowser1.Navigate(edit1.text);
  54.  
  55. while WebBrowser1.ReadyState<READYSTATE_COMPLETE
  56. do Application.ProcessMessages;
  57.  
  58. FileName:='Temp.html';
  59. SaveHTMLSourceToFile(FileName, WebBrowser1);
  60. //--
  61. MyList:=TStringList.Create;
  62. MyList.LoadFromFile('Temp.html');
  63. //--
  64. Parser(Name);
  65. end;
  66. //------------------------------------------------------------------------------
  67. procedure TForm1.Parser(Name: string);
  68. var
  69. //MyList, MyAddList, TopList, BottomList, ReadyList: TStringList;
  70. Str, str_list: string;
  71. i, posit, posit2, len: integer;
  72. flag: boolean;
  73. FileName: string;
  74.  
  75. begin
  76.  
  77. flag:=false;
  78. ReadyList:=TStringList.Create;
  79. MyAddList:=TStringList.Create;
  80. { ReadyList:=TStringList.Create;
  81. TopList:=TStringList.Create;
  82. BottomList:=TStringList.Create;
  83. TopList.LoadFromFile('CSS/Template_top.html');
  84. BottomList.LoadFromFile('CSS/Template_bottom.html');
  85. MyList:=TStringList.Create;
  86. MyAddList:=TStringList.Create;
  87. MyList.LoadFromFile('Temp.html'); }
  88.  
  89. for i:=0 to MyList.count-1 do
  90. begin
  91. if (pos('"b-translate"',MyList[i])<>0) then flag:=true;
  92. if (pos('"b-container"',MyList[i])<>0) then flag:=false;
  93. if flag=true then
  94. begin
  95. MyAddList.Add(Utf8Decode(MyList[i]));
  96. end;
  97. if (pos('"b-translate__tr"',MyList[i])<>0) then
  98. begin
  99. posit:=pos('"b-translate__tr">', MyList[i]);
  100. posit2:=pos('</span>]', MyList[i]);
  101. len:= posit2-posit-18;
  102. str_list:=(MyList[i]);
  103. delete(str_list,posit+18,len);
  104. end;
  105. end;
  106.  
  107. for i:=0 to TopList.Count-1 do
  108. ReadyList.Add(TopList[i]);
  109. // for i:= 0 to MyAddList.Count-1 do
  110. // ReadyList.Add(MyAddList[i]);
  111. ReadyList.Add(Utf8Decode(str_list));
  112. for i:= 0 to BottomList.Count-1 do
  113. ReadyList.Add(BottomList[i]);
  114.  
  115. FileName:='IrVerb/'+Name+'.html';
  116. ReadyList.SaveToFile(FileName);
  117.  
  118. ReadyList.Free;
  119. MyAddList.Free;
  120. MyList.Free;;
  121.  
  122. end;
  123. //------------------------------------------------------------------------------


ToDayGoodDay Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: ToDayGoodDay (статус: Посетитель)
Вопрос отправлен: 12 декабря 2010, 22:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, ToDayGoodDay!
бегло просмотрел - нашел несколько подозрительных мест.
процедура SaveHTMLSourceToFile
объект Stream : TStreamAdapter создается, но не освобождается (нет вызова метода free).

объект mylist лучше уж создавать и удалять в одном методе. А в метод parse передавать по ссылке. И от глобального объекта избавиться.

Также стоит помнить, что много памяти есть встроенный браузер. Тут уж сложно что то сделать, кроме как отказаться от него в пользу idHttp или аналогов.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 декабря 2010, 22:54
Оценка за ответ: 5

Комментарий к оценке: Stream это объект IStream, я , может плохо искал, но не нашел у него деструктора.

Еще, сразу уж, вопрос про :
установил FastMM4, но при разблокировании параметров выдает :
[Error] FastMM4Options.inc(126): Declaration expected but number found
на параметре $define FullDebugMode.

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.02 сек.