首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

多线程循环里内存不断增加,该如何解决

2012-04-19 
多线程循环里内存不断增加每循环一轮,内存使用大概增加几十k,还有那些资源没有释放?还是方法问题?请教Delp

多线程循环里内存不断增加
每循环一轮,内存使用大概增加几十k,还有那些资源没有释放?还是方法问题?请教

Delphi(Pascal) code
    while isrun^ do//isrun是一个pboolean,用来控制线程循环    begin      try        perl.Subject:=surl.Get(suri);//perl是正则表达控件,在前面create的,在线程destruct时候销毁了。        perl.RegEx:=srule;        perl.Options:=[preCaseLess];        while perl.MatchAgain do        begin          tmp.Add(perl.SubExpressions[1]);//tmp是tstrings,在循环前创建,在循环结束后销毁了。现在就是怀疑乇鹗tstrings出的问题          tmp.Add(perl.SubExpressions[2]);        end;      except      end;      sLog.Add(tmp.Strings[0] + '#' + tmp.Strings[1]);//FLog消息,详见:http://blog.itpub.net/resource/4034/LogUtils.pas      tmp.Clear;      for i:=0 to 100 do//这里只是想快速响应主窗体发送的退出线程指令      begin        Sleep(stime * 10);        if not isrun^ then        begin          logout:=True;          Break;        end;      end;      if logout then        Break;    end;


[解决办法]
看不出来,难道有死循环,,,
[解决办法]
tmp := TStringList.Create;
try
...
finally
tmp.Free
end;
[解决办法]
估计这不是重点,重点在sLog.Add(tmp.Strings[0] + '#' + tmp.Strings[1]);中的Strings[0]和Strings[1]有多大
[解决办法]
探讨
...
while perl.MatchAgain do
begin
tmp.Add(perl.SubExpressions[1]);//tmp是tstrings,在循环前创建,在循环结束后销毁了。现在就是怀疑乇鹗tstrings出的问题
tmp.Add(perl.SubExpressions[2]);
end;
...

[解决办法]
逐行注释,并测试,
[解决办法]
线程的东西?
用锁呀。
[解决办法]
探讨
逐行注释,并测试,

[解决办法]
在.dpr文件里加上一句
ReportMemoryLeaksOnShutdown := True;

并把工程改为Debug模式,运行一次就知道问题是不是在这了
还有,你可以用EurekaLog来帮你检测内存泄漏问题

热点排行