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?
如果是的话,就是他在吃内存!
而不是程序……
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?
如果是的话,就是他在吃内存!
而不是程序……
SQL?
如果是的话,就是他在吃内存!
而不是程序……
#21
你有没有释放掉??对数据库操作之后
#22
听你的意思,似乎不是什么分配和释放内存合理不合理的问题,而是代码中的BUG导致内存泄漏的问题,仔细检查程序吧,看看有没有使用完但是没有及时释放的内存。
#23
应该是你程序没写好,内存泄漏!
#24
楼主的问题其实是如何是从一堆代码中找出内存泄漏的BUG。。。
#25
严重同意楼上
#26
如果用了动态分配内存,一定要用面向对象的思想去理解内存分配机制,最好不用全局变量,你不贴代码很难具体说是什么原因,最好是不要概念上就理解错了
#27
另外在函数内部的局部变量在退出后可以自动释放吗?
可以。如果其中又分配了内存的话,需要自己来清除。
可以。如果其中又分配了内存的话,需要自己来清除。
#28
同意
#29
关注
#30
where is code?
#31
代码有内存泄露
#32
并不是Delphi的问题,而是你的程序的的问题。
#33
报告斑竹,有一个混吃等死的人 wj964124(孤星一嘉) 看他的回答就知道了