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

最近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里面了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐