DataSet.GetBookMark内存泄漏

这几天查内存泄漏,发现编辑窗体弹出后,出现了内存泄漏。

原来以为是编辑窗体的问题。经过排查发现是编辑窗体关闭后reOpen的时候

因为需要记录原有数据集的位置所以用到了BookMark

现在用了FastMM

发现之前的写法有问题

 

var

  lvBookMark:Pointer

begin

  lvBookMark:=cdsMain.GetBookMark;

try

    ……

finally

   if cdsMain.ValidateBookMark(lvBookMark) then

     cdsMain.GotoBookmark(lvBookmark);

  end;

……

 

这种写法会存在3字节的内存泄漏

  lvBookMark:=cdsMain.GetBookMark;

try

    ……

finally

   if cdsMain.ValidateBookMark(lvBookMark) then

     cdsMain.GotoBookmark(lvBookmark);

  cdsMain.FreeBookMark(lvBookMark)   ---加上这句。内存泄漏没有了

  end;

posted @ 2011-04-30 16:34  D10.天地弦  阅读(254)  评论(0编辑  收藏  举报