idhttp 写了一个类似网页爬虫 发现内存一直再增大直到崩溃

chinawcs 2013-08-19 03:35:07
开发环境 delphi xe + indy10

xin7 旗舰版

最近遇到很奇怪的现象 运行程序 观察任务管理对应进程 内存一直再增大 最后就是程序崩溃

而同样的程序 有时运行 内存就不增大 开始很正常 过一段时间又开始有规律的增大

用checkmen 检测的结果是 indy组件内存泄露 (应该不关indy的事)
EurekaLog 测试 并无内存泄露

idhttp 写在线程里 动态创建的

现在一直找不到原因 很多天了
indy的操作无非就是 post get
...全文
529 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtfnpgy 2013-12-12
  • 打赏
  • 举报
回复
楼主能否也发我一份?xiaowangzilove@163.com
suifeng27988 2013-11-05
  • 打赏
  • 举报
回复
发给我一个吧,我现在也遇到这问题了,谢谢,邮箱:suifeng27988@sina.cn
chinawcs 2013-08-23
  • 打赏
  • 举报
回复
经测试 现在完全没有问题了 内存不再增大 软件稳定运行 。 确实是 mshtml 的问题 感谢 武稀松 技术指导 这里不得不说 王哥的代码 一级棒。 分给你了
chinawcs 2013-08-21
  • 打赏
  • 举报
回复

<TBODY>
<TR>
<TD id=bold class=td1 width="5%" noWrap>FMT</TD>
<TD class=td1>BK</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>LDR</TD>
<TD class=td1>-----nam0 22-----   450 </TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>001</TD>
<TD class=td1>006755195</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>005</TD>
<TD class=td1>20130820162708.0</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>010</TD>
<TD class=td1>|a 978-7-302-31478-3 |d CNY29.00</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>100</TD>
<TD class=td1>|a 20130807d2013    em y0chiy50      ea</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>1010</TD>
<TD class=td1>|a chi</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>102</TD>
<TD class=td1>|a CN |b 110000</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>105</TD>
<TD class=td1>|a y   z   000yy</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>106</TD>
<TD class=td1>|a r</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>2001</TD>
<TD class=td1>|a Delphi程序设计及应用 |b 专著 |f 刘苗苗,邢煜,张永生等编著 |9 Delphi cheng xu she ji ji ying yong</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>210</TD>
<TD class=td1>|a 北京 |c 清华大学出版社 |d 2013</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>215</TD>
<TD class=td1>|a 14,262页 |d 26cm</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>300</TD>
<TD class=td1>|a 计算机应用21世纪高等学校规划教材</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>330</TD>
<TD class=td1>|a 本书共15章,主要内容包括:Delphi程序设计基础知识、Object Pascal语言基础知识、基本组件的使用、用户界面的设计、数组、过程与函数、对话框的使用、菜单栏、工具栏、状态栏、单文档和多文档界面的设计、图形图像与多媒体技术、文件操作和数据库编程。</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>6060</TD>
<TD class=td1>|a 软件工具 |x 程序设计 |x 高等学校 |j 教材</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>6060</TD>
<TD class=td1>|a 软件工具</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>6060</TD>
<TD class=td1>|a 程序设计</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>6100</TD>
<TD class=td1>|a Delphi</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>690</TD>
<TD class=td1>|a TP311.561 |v 5</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>701 0</TD>
<TD class=td1>|a 刘苗苗 |4 编著 |9 liu miao miao</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>701 0</TD>
<TD class=td1>|a 邢煜 |4 编著 |9 xing yu</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>701 0</TD>
<TD class=td1>|a 张永生 |c (计算机软件) |4 编著 |9 zhang yong sheng</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>090</TD>
<TD class=td1>|a TP311.56 |b lmm</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>096</TD>
<TD class=td1>|a TP311.56 |b lmm</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>801 0</TD>
<TD class=td1>|a CN |b ZL |c 20130724</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>CAT</TD>
<TD class=td1>|a ZWCFWB1 |b 01 |c 20130807 |l NLC01 |h 1328</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>CAT</TD>
<TD class=td1>|a CRH3 |b 60 |c 20130820 |l NLC01 |h 1627</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>049</TD>
<TD class=td1>|a A330000ZJL |b UCS01006125313 |c 012011213183</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>OWN</TD>
<TD class=td1>|a ZB301</TD></TR><!-- filename: full-000-body -->
<TR>
<TD id=bold class=td1 width="5%" noWrap>SYS</TD>
<TD class=td1>006755195</TD></TR><!-- filename: full-set-tail --><!-- publish section 

这里的数据是我要的 用你的 处理后 text 都在一行了 没法区分了 我是 每个 tr 单独处理数据

<TR>
<TD id=bold class=td1 width="5%" noWrap>210</TD>
<TD class=td1>|a 北京 |c 清华大学出版社 |d 2013</TD></TR><!-- filename: full-000-body -->
chinawcs 2013-08-21
  • 打赏
  • 举报
回复
万分感谢 测试结果 已经回你邮箱了 text对 但是没有回车换行
武稀松 2013-08-21
  • 打赏
  • 举报
回复
昨晚比较累,休息的很早.现在回给你了.请查收.
chinawcs 2013-08-21
  • 打赏
  • 举报
回复
还没收到呀 武哥 急用 我的邮箱 jim-0103@163.com 别发错了
武稀松 2013-08-20
  • 打赏
  • 举报
回复
IHTMLDocument2实际上是用的webbrowser,而微软的Webbrowser的内存释放不掉是公知的. 建议你采用其他的Html解析器来解析你的Html.
ytlines 2013-08-20
  • 打赏
  • 举报
回复
没想到现在还有这么多用delphi的朋友
浩南_哥 2013-08-20
  • 打赏
  • 举报
回复
用WinDbg测试下就知道哪块内存泄露了,具体的可以试试umdh,它可以分析两个时间点内存变化点。 设置下生成符号文件,这样崩溃的时候Windbg可以直接比对符号文件看出哪里崩溃了。
chinawcs 2013-08-20
  • 打赏
  • 举报
回复
邮件发您了 武哥 记得给我发
武稀松 2013-08-20
  • 打赏
  • 举报
回复
引用 16 楼 ysai 的回复:
试试Chromium,SVN: http://delphichromiumembedded.googlecode.com/svn
这个倒是完美.但是太大了.带20MB的DLL.
武稀松 2013-08-20
  • 打赏
  • 举报
回复
引用 15 楼 chinawcs 的回复:
[quote=引用 14 楼 wr960204 的回复:] IHTMLDocument2实际上是用的webbrowser,而微软的Webbrowser的内存释放不掉是公知的. 建议你采用其他的Html解析器来解析你的Html.
引用 14 楼 wr960204 的回复:
IHTMLDocument2实际上是用的webbrowser,而微软的Webbrowser的内存释放不掉是公知的. 建议你采用其他的Html解析器来解析你的Html.
武大哥 还记得我不 以前电话帮我解决过 技术问题 现在还一直感激呢 其他的Html解析器 适合delphi的能用什么呢 请指点[/quote] 上一段时间我倒是写了一个.D7-XE4/x86-X64通用的.可以给你用. 给我发邮件,我发给你. wr960204@126.com
ysai 2013-08-20
  • 打赏
  • 举报
回复
试试Chromium,SVN: http://delphichromiumembedded.googlecode.com/svn
chinawcs 2013-08-20
  • 打赏
  • 举报
回复
引用 14 楼 wr960204 的回复:
IHTMLDocument2实际上是用的webbrowser,而微软的Webbrowser的内存释放不掉是公知的. 建议你采用其他的Html解析器来解析你的Html.
引用 14 楼 wr960204 的回复:
IHTMLDocument2实际上是用的webbrowser,而微软的Webbrowser的内存释放不掉是公知的. 建议你采用其他的Html解析器来解析你的Html.
武大哥 还记得我不 以前电话帮我解决过 技术问题 现在还一直感激呢 其他的Html解析器 适合delphi的能用什么呢 请指点
chinawcs 2013-08-19
  • 打赏
  • 举报
回复
我只知道 这段代码有问题 大牛帮我分析下 为啥这样 莫非 线程里 用 CoInitializeEx 的问题 ? 怎么解决
chinawcs 2013-08-19
  • 打赏
  • 举报
回复
找到原因了 因为以下代码

function THtmlThreade.HtmlToText(HtmlText: WideString): WideString;
var
  V: OleVariant;
  Document: IHTMLDocument2;
begin
  Result := HtmlText;

  if HtmlText = '' then
    exit;


  CoInitializeEx(nil, COINIT_MULTITHREADED);
  Document := CoHTMLDocument.Create as IHTMLDocument2;
  try
    V := VarArrayCreate([0, 0], varVariant);
    V[0] := HtmlText;
    Document.Write(PSafeArray(TVarData(V).VArray));
    Document.Close;
    Result := trim(Document.body.outerText);
  finally

    Document.clear ;
    Document := nil;
    CoUninitialize;

  end;

end;

这个函数 是html转 纯文字的 从网上copy的 我是再线程中用到了这个函数 测试发现 注释改函数 内存正常 有没有其他函数代替这个
chinawcs 2013-08-19
  • 打赏
  • 举报
回复
引用 8 楼 sonicer 的回复:
不报不见得就没有内存泄露 比如 procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(self); end; 这个在程序关闭时,FastMM就不会报 但 procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(nil); end; 就会报 实际上,前一种反复运行内存使用当然会上涨
控件全部是Create(nil);方式
林石公 2013-08-19
  • 打赏
  • 举报
回复
不报不见得就没有内存泄露 比如 procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(self); end; 这个在程序关闭时,FastMM就不会报 但 procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(nil); end; 就会报 实际上,前一种反复运行内存使用当然会上涨
chinawcs 2013-08-19
  • 打赏
  • 举报
回复
刚才用 xe2 d7 分别编译了工程 测试 内存还是增加 检测代码N遍 没有 忘记free的地方 EurekaLog 也说明了这一点 莫非是 indy有问题 ?
加载更多回复(6)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧