DELPHI 动态数组 释放内存空间
程序运行时,通过SQLServer JDBC Driver连接数据库,将程序运行时需要的数据通过一个动态数组保存在内存中,大小约为150KB。
问题描述:因为程序一启动,所需要的数据就已经保存在内存中。当要用到这些数据时,程序是直接在内存中查找,而不到数据库中重新查找,只有向数据库中插入数据时,才会连接数据库进行插入操作。这样就造成了一个问题:比如,我之前使用的参数(程序启动时加载到动态数组中了)是1.21,现在我修改这个数据成1.20,在数据库中这个数据现在变成了1.20,而我的程序还在运行,没有再次连接数据库,这样的话,动态数组中的参数还是1.21,而我的程序进行运算时还是使用的1.21,导致与实际结果不符。
我采取过的操作:在每次需要使用参数时,都重新连接数据库加载参数数据。因为不会释放动态数组在内存中占用的空间,导致程序在运行了3000次以上之后,机器死机。
程序的使用环境:工业使用,需要与串口进行通讯,获取数据。24小时运行,平均每天运行次数在200次左右。运行环境的话,就是XP系统,内存512M以上,别的没有要求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
动态数组分配用setLength(arr, N)//N>0
动态数组释放也用setLength(arr, 0)
数据保存在服务器上,客户端先在服务器读数据,然后再保存在自己的内存中。服务器中数据更新之后,客户端这边需要使用数据时,还是在自己内存中读。 至于如何让数据库中的数据更新之后,立马让客户端的数据也跟着更新,这也是解决我目前这个问题的方式之一。 我是想不到什么办法啊! 在网上看到可以用指针清空动态数组的方法,但是暂时还无法用到我的程序中...指针太头疼了。
没有用过DELPHI,,友情帮顶一下····
不过你的这个是不是设计上有问题啊?!既然你可以从数组中取数据,那么说明你需要并可以命中内存中的数据,那能不能设计成改数据库的时候,同时修改内存值,相当于同步一次。至于内存回收,因为不知道DELPHI的回收机制,不过个人觉得,会不会是你代码的原因,一个如此成熟的语言应该不至于吧,不过指针的问题超麻烦的说……
客户端一共只有15个左右,有2种连接方式:1是直接连到服务器往数据库中插入数据;2是连接我们公司的服务端,然后我们的服务端再向数据库中插入数据。 这个程序我接手时,前同事已经将它写完整了。我现在只是维护一下,完全没有任何注释的代码真头疼...
自己顶一下自己...
看样子DELPHI已经过时了啊