读书人

是哪位高手占用了小弟我的内存

发布时间: 2012-12-17 09:31:40 作者: rapoo

是谁占用了我的内存?
本帖最后由 byyouxin 于 2012-11-03 16:30:26 编辑


function tihuan(txt,sFlie:string):string;//替换关键词
.......
yuan.LoadFromFile(GetCurrentDir+'\替换内容\'+sFlie);
for i:= 0 to yuan.Count - 1 do
begin
Tstr.Text:=yuan[i];
Ts.Text:=zhaowenben(Tstr.Text,'<li>(.*)\|(.*)\|(.*)</li>',1);
Tt.Text:=zhaowenben(Tstr.Text,'<li>(.*)\|(.*)\|(.*)</li>',2);
if pos(Tguanxi.Text,Tstr.Text) >0 then
begin
end
else
begin
if pos(Ts.Text,txt) >0 then
begin
Tguanxi.Text:=Ts.Text;
end;
txt := tihuanwenben(txt,Ts.Text,Tt.Text);
end;
end;
Result:=txt;
yuan.Free;
Tstr.Free;
Ts.Free;
Tt.Free;
Tguanxi.Free;


function tihuanwenben(yuanwenjian,tihuanzifu,tihuanhou:string):string;
var
a:tperlregex;
begin
a:=TPerlRegEx.Create;
a.Subject:=yuanwenjian;
a.RegEx:=tihuanzifu;
a.Replacement:=tihuanhou;
a.ReplaceAll;
Result:=a.Subject;
a.Free;
end;

启动3M ,tihuan('混蛋','...') 后 20M

D2010+W7
菜鸟求解!
[最优解释]
程序执行结束后,过一会内存应该要回落正常的
对于资源释放,加上try finally有时也是很有必要的

另外,每次循环时tihuanwenben中tperlregex都会创建,虽然最后释放了
但系统不一定会立即回收占用的内存,所以再次创建时会申请新的内存空间
可以改成在调用前就创建,然后传入参数,那么就只创建一次了

[其他解释]
顶一下4楼的,
不停的创建和释放确实是这样的,尤其是反复创建的情况下从楼主的语句中虽然说是顺序没有错,万一中间出了一个小错误的话,后面 就没法执行,或直接跳出。
加上try finally 模块是非常有必要的。finally 是必须执行的块,即使你在Try里面使用的exit.finally中的语句也会执行.
对于使用的对象,如果只是数据变一下,对象处理一下数据,再返回结果,只要使用前Create,全部处理完再Free就可以了。
[其他解释]
嘎嘎找到了原因

但是 内存占用的问题还是让我头疼 - -!
[其他解释]
tperlregex是啥。。
[其他解释]
用delphi的不该不知道这个正则库啊。。。

读书人网 >.NET

热点推荐