之前一直以为是自己的程序 导致程序在运行期间内存大量泄露。经过很多次的测试发现不是自己程序的问题。
c.exe把b.dll注入a.exe里面
a.exe本身就有运行中内存越来越大的问题,
这个问题不是我考虑的
然后我开始认真的研究b.dll的内存泄露问题
发现 在我创建的线程中有内存泄露 在我窗体创建之后运行的泛型也有内存泄露,我用了很多办法,始终无法正确的释放。实在一筹莫展。 总共有20多个泛型listif list.count<>0 then
 begin  list.clear;
 end;
if Assigned(list) then   FreeAndNil(list);
//有些可以释放 有些不能释放 很奇怪 前面的无法释放,导致后面的释放全部失败。
线程里面也有使用泛型的list
调用一个过程 里面的数据先clear然后重新添加,添加完之后,使用完之后,重新调用过程,这样不断的循环往复。
到最后 线程里面有非常多的数据没有释放。
早知道用泛型是存在风险的,本来以为写了一些delphi的程序  感觉问题不大,可是这个风险真的让我头疼不已
在论坛发的帖子 找的答案很多都不明白为什么用不起来。
感觉是对的 ,但是执行后发现还是错的。有些编译都无法通过,真的感觉好麻烦啊。
还是那个老问题。。泛型的list怎么才能正确的释放

解决方案 »

  1.   

    呵呵,还是你。
    我觉得这个问题和泛型关系不大,和List这种容器类关系也不大。
    你还是没有把对象的生命周期管理好。我又仔细看了一下你上一个帖子,给你2个建议
    1、如果你不熟悉delphi的内存分配和释放,建议把结构换成类,这样创建和释放都很安全。
    2、把TList改成TObjectList,可以自动给你释放对象。
      

  2.   

    TList.Clear是不会释放添加的内存,需要逐个释放List里的内存。
      

  3.   

    而且你非用结构指针的话,你看看这里吧 
    http://www.cnblogs.com/del/archive/2008/11/10/1330456.html
    给结构指针申请和释放内存应该用New/Dispose而不是GetMemory和FreeMemory