如何释放内存?(100分)

  • 主题发起人 主题发起人 sublime
  • 开始时间 开始时间
S

sublime

Unregistered / Unconfirmed
GUEST, unregistred user!
应用运行时动态创建了很多对象,对象调用完后,用free将其析构了,但是内存却没有释放
掉,请问这是什么原因?
 
什么对象?
app:=assingned;
 
我的问题时这样的:程序中有一个数据转换子系统,用来转换数据文件,将文件中的数据
提取,写到数据库中。其中创建了TDatabase和TQuery对象,在刚调用这个转换函数转换
数据文件时,内存占用了2M,文件转换结束时,将TDatabase和TQuery对象FREE掉了,但是
内存还占用60K,即有60K的内存没有被释放,当转换的文件越来越多时,没有释放的内存
也越来越多。因此,这个应用程序运行时占用的内存也越来越大。
现想请教各位高手,如何解决这个问题?如果觉得我的问题描述不清,也请指出,我将给于
更详细的描述,谢谢各位!
 
此问题比较急,请各位高手给点提示!
谢了先!
 
先将
Quert.Active := False;
Datebase.Acitve := False;
然后再Free

如果还不行,那可就没有办法了,除非改Delphi源代码
 
我去试一试,谢了先!
 
还是和以前一样,请问Adnil:怎么修改Delphi源代码?
 
修改Delphi源码,直接修改Pas文件即可
 
wbcp2000:谢谢你的回答!
我的意思是:修改delphi/source目录下的哪个pas文件?应该是delphi的系统文件,而不是
自己编写的代码。我看过在Delphi中使用VisiBroker 开发CORBA应用程序,会出现Server端
接口的传入参数占用内存不能正常释放的错误,是修改Delphi6/Source/Rtl/Corba40/Corba.pas,
我这个应用程序和数据库相关,应修改哪个pas文件呢?是sys还是win目录,或者其他目录下
的pas文件?
 
不要用TDataBase和TQuery,检查一下是否仍有内存泄漏,
如果是,问题可能出在你的转换函数里面
 
转换函数的变量有错误。
 
转换函数没有问题,这是版本的升级,以前运行过多年(我不知道是否也存在内存泄漏问题),
这次在应用程序中增加了一些新功能,而且创建和释放对象是在try...finally异常保护中
进行的,应该很安全。TDataBase和TQuery对象是动态创建、动态释放的,不知和这有什么
关系?
还有一个问题,本应用程序中用到了多线程,应用程序启动时,联机转换线程立刻启动,自动
转换设定目录下的数据文件,在while循环中按行读取文件时可能出现死循环( 比如:没有判断
文件结束否(已解决,只是举例),或者文件中有非法语句等不可预料的情况),这时线程不能
自动退出,请问有什么方法强制退出该线程(不用另外一个线程来终止它)。
另外,这和上边的内存泄漏有关吗?
解决办法?
 
权你用Ado,这个东东M$的,内存放的光光
 
谢谢,我再想想有没有不用将源程序做大改动的办法。
 
到底delphi5的corba.pas在哪里? delphi真是一个垃圾!
 
后退
顶部