delphi程序吃内存,简直疯了!大家快来帮忙阿,散分!

时间:2023-01-11 22:48:19
我的程序运行一段时间后发现内存消耗殆尽,请问如何分配和释放内存比较合理?欢迎大家举出实例!

33 个解决方案

#1


如果你建的项目有五个以上的窗体,建议你用一个窗体,建一个,不要都在一开始就建,当用完之后close,不要hide,这样就可以释放很多的内存。

#2


动态创建窗体
用完就释放

#3


我觉得不论程序大小都应该使用一个窗体,创建一个窗体,应该养成这个良好的编程习惯的啊。

#4


呵呵,不知道什么程序会这样

#5


感谢你们的参与,但是你们的根本没有看懂我的意思,我是说如何在程序中分配和释放内存,而不是创建几个窗体的问题,我的程序运行一周后发现内存严重不足,系统运行很慢,最终因为内存消耗殆尽而*重新启动,我的程序是个监控程序,无人操作,就一个窗体,显示一条曲线,不断从现场采集数据,显示数据,保存数据,查询数据,要求至少能够连续运行一年,但是现在才运行一周就已经不行了,我用了大量的动态分配内存方法,即用setlength函数,结果出现了这种情况,希望各路高手参与进来,指点迷津!谢谢

#6


代码有内存泄露,必须检查代码才行。

#7


请教一个问题:如果两次用Setlength函数给一个全局变量分配内存,第一次分配了1000个字节,第二次分配了500个字节,那么另外500个字节能够自动释放吗?另外在函数内部的局部变量在退出后可以自动释放吗?freemem函数是否有问题?

#8


可是自动释放的,用Setlength分配的内存可以用Finalize来释放

#9


你动态分配的内存可能没有有效的释放,导致内存泄漏。用MemProof来检测吧!

#10


你不把代码贴出了,怎么判断?????

#11


什么程序,这么牛?

#12


肯定是动态分配的内存没有及时的收回!

#13


关注......

#14


肯定是动态分配的内存没有及时的释放!

#15


up

#16


用鏈...

#17


up

#18


看SetLength的参数是什么了,如果只是一个单纯的指针,用SetLength(x,0)就是释放内存的,但如果x指向了别的内存指针就应该先释放,否则就变成了垃圾内存了!

#19


up

#20


用的什么数据库?

SQL?

如果是的话,就是他在吃内存!


而不是程序……

#21


你有没有释放掉??对数据库操作之后

#22


听你的意思,似乎不是什么分配和释放内存合理不合理的问题,而是代码中的BUG导致内存泄漏的问题,仔细检查程序吧,看看有没有使用完但是没有及时释放的内存。

#23


应该是你程序没写好,内存泄漏!

#24


楼主的问题其实是如何是从一堆代码中找出内存泄漏的BUG。。。

#25


严重同意楼上

#26


如果用了动态分配内存,一定要用面向对象的思想去理解内存分配机制,最好不用全局变量,你不贴代码很难具体说是什么原因,最好是不要概念上就理解错了

#27


另外在函数内部的局部变量在退出后可以自动释放吗?
  可以。如果其中又分配了内存的话,需要自己来清除。

#28


同意

#29


关注

#30


where is code?

#31


代码有内存泄露

#32


并不是Delphi的问题,而是你的程序的的问题。

#33


报告斑竹,有一个混吃等死的人    wj964124(孤星一嘉)  看他的回答就知道了

#1


如果你建的项目有五个以上的窗体,建议你用一个窗体,建一个,不要都在一开始就建,当用完之后close,不要hide,这样就可以释放很多的内存。

#2


动态创建窗体
用完就释放

#3


我觉得不论程序大小都应该使用一个窗体,创建一个窗体,应该养成这个良好的编程习惯的啊。

#4


呵呵,不知道什么程序会这样

#5


感谢你们的参与,但是你们的根本没有看懂我的意思,我是说如何在程序中分配和释放内存,而不是创建几个窗体的问题,我的程序运行一周后发现内存严重不足,系统运行很慢,最终因为内存消耗殆尽而*重新启动,我的程序是个监控程序,无人操作,就一个窗体,显示一条曲线,不断从现场采集数据,显示数据,保存数据,查询数据,要求至少能够连续运行一年,但是现在才运行一周就已经不行了,我用了大量的动态分配内存方法,即用setlength函数,结果出现了这种情况,希望各路高手参与进来,指点迷津!谢谢

#6


代码有内存泄露,必须检查代码才行。

#7


请教一个问题:如果两次用Setlength函数给一个全局变量分配内存,第一次分配了1000个字节,第二次分配了500个字节,那么另外500个字节能够自动释放吗?另外在函数内部的局部变量在退出后可以自动释放吗?freemem函数是否有问题?

#8


可是自动释放的,用Setlength分配的内存可以用Finalize来释放

#9


你动态分配的内存可能没有有效的释放,导致内存泄漏。用MemProof来检测吧!

#10


你不把代码贴出了,怎么判断?????

#11


什么程序,这么牛?

#12


肯定是动态分配的内存没有及时的收回!

#13


关注......

#14


肯定是动态分配的内存没有及时的释放!

#15


up

#16


用鏈...

#17


up

#18


看SetLength的参数是什么了,如果只是一个单纯的指针,用SetLength(x,0)就是释放内存的,但如果x指向了别的内存指针就应该先释放,否则就变成了垃圾内存了!

#19


up

#20


用的什么数据库?

SQL?

如果是的话,就是他在吃内存!


而不是程序……

#21


你有没有释放掉??对数据库操作之后

#22


听你的意思,似乎不是什么分配和释放内存合理不合理的问题,而是代码中的BUG导致内存泄漏的问题,仔细检查程序吧,看看有没有使用完但是没有及时释放的内存。

#23


应该是你程序没写好,内存泄漏!

#24


楼主的问题其实是如何是从一堆代码中找出内存泄漏的BUG。。。

#25


严重同意楼上

#26


如果用了动态分配内存,一定要用面向对象的思想去理解内存分配机制,最好不用全局变量,你不贴代码很难具体说是什么原因,最好是不要概念上就理解错了

#27


另外在函数内部的局部变量在退出后可以自动释放吗?
  可以。如果其中又分配了内存的话,需要自己来清除。

#28


同意

#29


关注

#30


where is code?

#31


代码有内存泄露

#32


并不是Delphi的问题,而是你的程序的的问题。

#33


报告斑竹,有一个混吃等死的人    wj964124(孤星一嘉)  看他的回答就知道了