这几天查内存泄漏,发现编辑窗体弹出后,出现了内存泄漏。
原来以为是编辑窗体的问题。经过排查发现是编辑窗体关闭后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;