有个程序不停地吃内存,后来发现在不同的操作系统下执行竟然结果不一样.我的机器是XP系统,测试机是2000系统。有一个地方竟然在执行的时候出现了差异!var
  theDocument: TMXLDocument;
begin
  theDocument:= TMXLDocument.create(nil);
  theDocument.loadfromfile('123.xml');  //这个文件肯定是合法的
  FreeAndnil(theDocument);
end;把这个函数放在Timer里,每100ms执行一次!在XP上执行一个晚上也没有问题,而在2000下疯狂的吃存!!!为什么?

解决方案 »

  1.   

    http://community.csdn.net/IndexPage/SmartQuestion.aspx#bespecific
      

  2.   

    theDocument:= TMXLDocument.Create(Self);
    //                                ~~~~~
      

  3.   

    谢谢jiangsheng(蒋晟.Net[MVP]) ,呵呵。
    我试过用Self和Application,没有效果,仍然在吃内存。
    并且我也按照有些朋友的办法将Free写在Finally里,也没有效果。我实验过,问题是出在了loadfromfile上,如果只是创建不load的话,是没有问题的,只要一load就不行了。我在XP上实验没有问题,早Win2000 Server Family上实验有问题,在Win2000 Professional上也是没有问题的。郁闷的心情难以言表,所以用了个夸张的标题,不好意思了~~
      

  4.   

    三种解析器   1、微软的解析器(MSXML SDK)   微软解析器主要应用在Windows中,在安装MSXML SDK的时候会安装解析器,同时IE浏览器也提供了解析器,这个解析器是一个COM。   2、Apache的Xerces解析器   Borland自己实现了一个Xerces解析器,这个可以通过调用xercesxmldom.dll模块来实现;如果使用这个解析器可能需要同应用程序一起进行分发xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL三个DLL文件   3、OpenXML解析器   这个解析器的源代码存在于xdom.pas单元中,这个可以通过http://www.philo.de/xml/进行跟新下载,这个是一个德国人写的XML解析器;   ·使用不同解析器的比较   对于三种方式的解析器比较如下:   1、微软的解析器   微软的解析器当然好了,但是也不能排除存在的意外情况,在我个人的经验中,至少我们公司对于XML解析的方式,只有在IE6.0以上的版本才能够正常的工作;   至于,Borland同样是通过引入MSXML.DLL的接口来实现的,所以可以推理出,同样存在同样的问题;这个通过研究TMSDOMImplementation(msxmldom单元中)的实现方式可以得到证明,实现的过程中通过调用CoCreateInstance函数接口来实现解析的;   在发布解析XML的代码的时候可能就会存在由于IE的本版的不同,需要把IE6.0一同发布,比较麻烦;   2 、Borland的Xerces解析器   这种方式的解析器是通过 LoadLibrary(PChar(LibName));函数,LibName的内容是xercesxmldom.dll(Windows平台),libxercesxmldom.so.1(Linux平台)。那么就需要随同应用程序一起发布的Dll,就包括了xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL;   这个发布相对于发布不同版本的IE6.0来说要相对简单一些;   3、OpenXML解析器   由于存在xdom.pas单元,这个单元中包含了完全的XML解析的源代码,那么应用这种方式,可以避免软件发布的种种问题,这是由于解析的代码被静态编译在应用程序内部。唯一不好的地方就是应用程序的体积可能要大一些;
      

  5.   

    换一个解析器看看,
    再就是用同一个TMXLDocument,不要反复创建,
    免得TMXLDocument本身造成内存泄露不一定管用,不过你可以试下
      

  6.   

    谢谢楼上的各位出手相助!
    我经过反复测试,只发现在一台装有Wind2000 Server Family上的机器上不停地吃内存,在其他的机器上(装有Wind2000 Server Family)都没有问题.
    我决定放弃了这个问题了,因为不确定的因素实在是太多了。马上结帖!星期一交辞职报告,告别程序员生涯~~