有个程序不停地吃内存,后来发现在不同的操作系统下执行竟然结果不一样.我的机器是XP系统,测试机是2000系统。有一个地方竟然在执行的时候出现了差异!var
theDocument: TMXLDocument;
begin
theDocument:= TMXLDocument.create(nil);
theDocument.loadfromfile('123.xml'); //这个文件肯定是合法的
FreeAndnil(theDocument);
end;把这个函数放在Timer里,每100ms执行一次!在XP上执行一个晚上也没有问题,而在2000下疯狂的吃存!!!为什么?
theDocument: TMXLDocument;
begin
theDocument:= TMXLDocument.create(nil);
theDocument.loadfromfile('123.xml'); //这个文件肯定是合法的
FreeAndnil(theDocument);
end;把这个函数放在Timer里,每100ms执行一次!在XP上执行一个晚上也没有问题,而在2000下疯狂的吃存!!!为什么?
// ~~~~~
我试过用Self和Application,没有效果,仍然在吃内存。
并且我也按照有些朋友的办法将Free写在Finally里,也没有效果。我实验过,问题是出在了loadfromfile上,如果只是创建不load的话,是没有问题的,只要一load就不行了。我在XP上实验没有问题,早Win2000 Server Family上实验有问题,在Win2000 Professional上也是没有问题的。郁闷的心情难以言表,所以用了个夸张的标题,不好意思了~~
再就是用同一个TMXLDocument,不要反复创建,
免得TMXLDocument本身造成内存泄露不一定管用,不过你可以试下
我经过反复测试,只发现在一台装有Wind2000 Server Family上的机器上不停地吃内存,在其他的机器上(装有Wind2000 Server Family)都没有问题.
我决定放弃了这个问题了,因为不确定的因素实在是太多了。马上结帖!星期一交辞职报告,告别程序员生涯~~