加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi批量存入多媒体字段 遇到内存溢出的坑

发布时间:2020-12-15 09:53:55 所属栏目:大数据 来源:网络整理
导读:最近delphi做一个小工具其中一个需求要把上W张照片存入数据库多媒体字段。 程序转到1,2W的时候即内在溢出了。最多一次转了3W张照片。很简单的一段代码后来仔细检查发现其中的坑。 下面放上代码 1 with DMConn.AdsEdit do 2 begin 3 Active := False; 4 Comm

最近delphi做一个小工具其中一个需求要把上W张照片存入数据库多媒体字段。

程序转到1,2W的时候即内在溢出了。最多一次转了3W张照片。很简单的一段代码后来仔细检查发现其中的坑。

下面放上代码

 1   with DMConn.AdsEdit do
 2   begin
 3     Active := False;
 4     CommandText := SELECT ID,Data,Ext FROM Table where 1=2;
 5     Active := True;
 6   end;
 7   
 8   with DMDst.UniQuery do
 9   begin
10     Active := False;
11     SQL.Clear();
12     SQL.Add(vSql);      
13     Active := True;  
14     while not Eof do
15     begin
16       vFile := vPath + DMDst.UniQuery.FieldByName(PATH).AsString;
17       vNewID := DMDst.UniQuery.FieldByName(NewID).AsString;
18       gg.Str.Replace(vFile,/,);
19       vPersonID := ExtractFileNameNoExt(vFile);
20 
21       if FileExists(vFile) and (DMConn.GetSQLValueInt(SELECT count(*) FROM Table where ID =  + QuotedStr(vNewID)) <= 0) then
22       begin
23         try
24           with DMConn.AdsEdit do
25           begin
26             Edit;
27             Append;
28             FieldByName(ID).AsString := vNewPersonID;
29             FieldByName(Ext).AsString := ExtractFileExt(vFile);
30             TBlobField(FieldByName(Data)).LoadFromFile(vFile);
31             Post;
32           end;
33         finally
34         end;
35       end;
36       Next;
37     end;

注意:

SELECT ID,Ext FROM Table where 1=2; 这段代码中的where 1=2就是这个where加上这后进程内存一直保持在30M左右不加这个where内在就一直不停增长,直到内存溢出。感觉不加这一句,每次添加的照片就增加到

DMConn.AdsEdit里面了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读