我采用的是  D6+ado+access2003,结果出现了内存的泄露,大家帮忙看一下代码如下,就是简单的向数据库中填充图片
adoquery是直接拖上去的控件前面的连接部分不再贴出,只贴出有问题的部分
jp为前面定义的TJpegImage类型,存放图片
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('insert into LS_Image (LS_ImageData,id) Values(:ImageData,'''+id+''')');
adoquery1.parameters[0].assign(jp);
adoquery2.execsql;
jp.free;此段代码在Timer中,interval为1000ms,即每秒插入一张图片,从任务管理器中发现出现了内存泄露但是该段代码向sql server中插入数据时没有出现泄露情况,请各位大虾帮忙看一下。多谢大家了

解决方案 »

  1.   

    你确认是内存泄露吗?
    ACCESS是文件数据库,它占用的资源是算在调用它的进程里的,你试试断开连接,看内存是否回落了.
      

  2.   

    前面打错了,应该是adoquery1.execsql;
                不是  adoquery2.execsql;恩我的测试程序 project1  在插入了2000张图片之后,project1 占用内存增加了 24764K
    断开连接后,内存只回落了20K左右,基本上算是没有回落吧
      

  3.   

    我的代码 只有在最开始的时候申请了一块内存用于存放 图片  jp:TJpegImage控件也是直接拽上去的而且jp每次存储后也都free掉了其他地方运行没有出错
      

  4.   

    顺便问一句
    我这么做,为什么提示  Cannot assign a TJPEGImage to a TParameter.
    我该怎么做啊?
    ---------------------------
    var
      jp:TJPEGImage;
      id:string;
    begin
      id:= FormatDateTime('ddmmss',now());
      jp:= TJPEGImage.Create;
      jp.LoadFromFile('C:\a.jpg');
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('insert into jp (jpdata,id) Values(:ImageData,'''+id+''')');
      adoquery1.parameters[0].assign(jp);
      adoquery1.execsql;
      jp.free;
      

  5.   

    to gwycsdn我知道你的意思,大部分的程序在最小化之后内存占用都会减少很大一部分,再次最大化也不会
    马上回复原来的内存占用大小但那是由于你将程序最小化之后,系统将你的进程占用的内存转移到了“硬盘”上,就是你的虚拟内存上了,所以内存占用会大大下降。但我的泄漏依然就没人尝试运行我的代码试试看吗??看看你们是不是也会出现这种情况如果可以,我把代码发到各位邮箱里也可以,这里不让上传附件,郁闷啊