导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2004/7/27 11:10:43
标题:
请教用BLOB字段存、取图象,为何产生内存泄露?
浏览:1579
加入我的收藏
楼主:
我有以前的一个程序,Delphi 4,InterBase 5 环境,在一个表中用BLOB字段存图象,存图象没有问题,但是显示图象时发现有内存泄露问题(用MEMPROOF查得),我的图片是*.jpg格式,大约32K,每次显示一下图象,就会增加32K的内存占用,当程序运行时间长了,就会出现内存存取冲突的提示,重新进入程序后就正常了。 显示图象的程序片段如下:G_LastPhoto是一个路径及文件名的公用变量。 with TBlobField(QYCustInfo.FieldByName('CustPhoto')) do if BlobSize > 0 then begin SaveToFile(G_LastPhoto);//经实验发现这句占用内存不释放,不明白? IGPhoto.Picture.LoadFromFile(G_LastPhoto); end; end; 我用这种方法合适不合适?用别的方法怎样显示BLOB图象?有没有相关的函数?是不是用了BLOB字段就自动分配了内存?如果是的话如何释放? 此问题困扰我一个多月了,最后发现是SaveToFile导致,但不知如何处理,请各位帮忙解答一下。不胜感激! 再次感谢。
----------------------------------------------
-
作者:
sephil (NAILY Soft)
★☆☆☆☆
-
盒子中级会员
2004/7/27 15:25:47
1楼:
var Stream: TBlobStream; begin Stream := TBlobStream.Create( TBlobField(QYCustInfo.FieldByName('CustPhoto')) , bmRead); try Stream.Seek(0, 0); IGPhoto.Picture.LoadFromStream(Stream); finally Stream.Free; end; end;
----------------------------------------------
Copyright 2008 ? NAILY Soft
Click here to redirect to my home Click here to redirect to my blog
作者:
2004/7/28 14:19:11
2楼:
谢谢sephil的耐心解答!这是一个很好的方法,可是DELPHI 4没有LoadFromStream()方法,由于很多原因又不能升级DELPHI版本,如何?有没有别的办法?再次感谢!
----------------------------------------------
-
作者:
2004/7/28 16:07:18
4楼:
谢谢sephil!我是第一次到这个论坛,才知道你是这里的高手。能得到你的帮助非常感谢,希望以后能得到你的指教。不过刚才我用Delphi 6试了一下,好象也没有啊。D7、D8有?
----------------------------------------------
-
作者:
sephil (NAILY Soft)
★☆☆☆☆
-
盒子中级会员
2004/7/28 16:33:01
5楼:
我也不是什么高手 只是用Delphi的时间长写而已 不好意思,是我记错了 var Stream: TBlobStream; Jpg: TJpegImage; begin Stream := TBlobStream.Create( TBlobField(QYCustInfo.FieldByName('CustPhoto')) , bmRead); try Stream.Seek(0, 0); Jpg := TJpegImage.Create; try Jpg.LoadFromStream(Stream); IGPhoto.Picture.Assign(Jpg); finally Jpg.Free; end; finally Stream.Free; end; end; 记得引用Jpeg
----------------------------------------------
Copyright 2008 ? NAILY Soft
Click here to redirect to my home Click here to redirect to my blog
作者:
2004/7/29 14:09:03
6楼:
谢谢sephil! 用你第二次的方法试验,程序可正常编译,但运行时还是有的32K的内存积累,好象Jpg.Free; 及Stream.Free;语句都不起作用,一执行Jpg.LoadFromStream(Stream);这句就产生了垃圾,屏蔽掉这句就没问题了。联想到一开始用的SaveToFile()语句,只是存一下盘也不该有问题呀!问题到底出在哪儿?帮我找找吧。非常感谢你这样认真给我解答,使我受益非浅。谢谢!
----------------------------------------------
-
作者:
2004/7/29 16:17:53
8楼:
你是说DELPHI环境?还是WINDOWS? 谢谢!
----------------------------------------------
-