最近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, Data, Ext FROM Table where 1=2'; 这段代码中的where 1=2就是这个where加上这后进程内存一直保持在30M左右不加这个where内在就一直不停增长,直到内存溢出。感觉不加这一句,每次添加的照片就增加到

DMConn.AdsEdit里面了。

转载于:https://www.cnblogs.com/DevMuYuer/p/10177320.html

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

  1. vue.js与ajax删除,javascript - VueJs和VueResource,从Ajax请求中删除标头字段 - 堆栈内存溢出...

    当实例化Vuejs (2.2.6)和Vue-resource (1.2.1)时 ,我使用以下代码设置标头授权,通过这种方式,我可以将所有请求授权给我的API: Vue.http.headers.com ...

  2. .dta matlab,matlab - 使用带有C DLL的delphi dta类型的问题 - 堆栈内存溢出

    这里的基本问题是二进制互操作不匹配之一. 简单地说,指向数组的指针在二进制级别与Delphi开放数组参数不同. 虽然它们在语义上都表示数组,但二进制表示不同. C函数声明如下: __declspec( ...

  3. delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...

    前言 那些使用过 C 或者 C++ 的读者一定会发现这两门语言的内存管理机制与 Java 的不同.在使用 C 或者 C++ 编程时,程序员需要手动的去管理和维护内存,就是说需要手动的清除那些不需要的对 ...

  4. JDBC的批量查询报告内存溢出解决方法

    JDBC的批量查询报告内存溢出解决方法 参考文章: (1)JDBC的批量查询报告内存溢出解决方法 (2)https://www.cnblogs.com/DreamDrive/p/5761227.htm ...

  5. 超大数据量的xlsx格式的excel文件的读取和解析,解决了POI方式的内存溢出和性能问题

    在之前的博文< POI读取并解析xlsx格式的excel文件>中,在小数据量的情况下是可以轻松愉快的处理的,但是当excel文件的数据量达到百万级的时候, InputStream is = ...

  6. 本来想用“{{”秀一波,结果却导致了内存溢出!

    作者 | 王磊  来源 | Java中文社群 生活中的尴尬无处不在,有时候你只是想简单的装一把,但某些"老同志"总是在不经意之间,给你无情的一脚,踹得你简直无法呼吸. 但谁让咱年轻 ...

  7. Android 内存溢出解决方案(OOM)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...

  8. JVM笔记1:Java内存模型及内存溢出

    灰色:所有线程间共享 白色:线程间隔离 程序计数器:当前线程所执行的字节码的行号指示器,字节码解释器通过改变该计数器的值来选取下一条需要执行的字节码指令. 1,一块很小的内存空间 2,每条线程都需要一 ...

  9. linux weblogic 内存溢出,weblogic10内存溢出解决方法

    在开发过程中经常会遇到weblogic内存溢出问题,用下面的办法解决了. 找到domain/bin下的setDomainEnv.cmd文件,里面可以找到以下四行代码,将值该打一倍,重启服务. set ...

最新文章

  1. 867. 分解质因数
  2. ios 消息服务器,关于IOS APNS推送消息(iphone端+服务端)
  3. springMVC视频教程
  4. SpringBoot中的异步操作与线程池
  5. pom文件报错_FastDFS实战总结,分布式文件存储,高并发高可用,看这篇就够了...
  6. 【源码】HashMap源码及线程非安全分析
  7. 自定义服务器控件的元数据属性(MSDN)
  8. ConcurrentLinkedQueue since java1.5
  9. AutoCAD自动标注坐标和坐标输出宏
  10. Python 爬虫 scrapy 反 反爬虫策略
  11. 酒店管理系统服务器网络,方讯酒店管理系统网络版安装配置说明.doc
  12. 高仿墨迹天气下拉拉伸图片
  13. 51单片机LCD1602电子时钟
  14. SSM网上校园订餐系统-javaweb, mysql
  15. git上传很多文件报错解决
  16. 江苏省普通话水平测试计算机评分细则,江苏省计算机辅助普通话水平测试评分细则...
  17. OpenCV开发笔记(五十二):红胖子8分钟带你深入了解直方图对比匹配(图文并茂+浅显易懂+程序源码)
  18. 在vscode中查看当前项目的工作环境
  19. 中国智能制造发展趋势!
  20. 【王道考研】操作系统 笔记 第二章上 进程调度

热门文章

  1. bat循环执行带参数_dos命令exit图文教程,结束退出CMD.EXE程序或当前bat批处理脚本...
  2. gpu超算算法_俄罗斯科学家:使用GPU将个人电脑转变为超级电脑
  3. matlab 通过矩阵变换使图像旋转平移_数字图像处理|P11 第三章 第四节 图像的几何变换...
  4. java怎么不安装到c盘的教程,帮您设置win10系统安装不了java的详细步骤
  5. if test 多条件_五条写好JavaScript条件语句的建议(译)
  6. WEB中get请求和post请求的区别
  7. python从入门到精通学习笔记_Python从入门到精通之基础概念
  8. xctf php2,XCTF PHP2
  9. Zabbix的聚合图形配置
  10. 常用数据库语句(更新)