Office中国论坛/Access中国论坛

标题: ADP程序两个窗体来回切换,提示内存不足,怎么解决? [打印本页]

作者: XMX64311    时间: 2018-8-9 16:16
标题: ADP程序两个窗体来回切换,提示内存不足,怎么解决?
各位老师有没有遇到这样的情况?ACCESS程序运行一段时间会提示内存不足,如两个窗体通过计时器实现来回切换,可切换
一段时间,如几个小时后,电脑会提示内存不足,程序停止运行!

  请问有没有VBA清内存的代码?

  我用了下面代码清理,实践证明没有效果:
Call SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1)
作者: roych    时间: 2018-8-10 17:22
没搞懂为什么会有这种来回切换的需求,而且还使用计时器事件~~~
印象中,计时器事件比较耗内存的。
作者: XMX64311    时间: 2018-8-13 10:42
我是车间有电视看板,需要在安灯和订单状态来回切换的,但内存会越来越高导致系统停止运行,这个问题很严重!需要一段自动清内存的代码!
作者: ganlinlao    时间: 2018-8-14 11:05
这是典型的内存泄露问题。代码当中有一部分代码 导致内存无法释放资源。或导致栈直接溢出。
作者: XMX64311    时间: 2018-8-15 13:56
ganlinlao 发表于 2018-8-14 11:05
这是典型的内存泄露问题。代码当中有一部分代码 导致内存无法释放资源。或导致栈直接溢出。

请问,可以解决吗?
作者: tmtony    时间: 2018-8-16 15:14
你看看代码中有什么对像,逐个都释放一下看看
作者: ganlinlao    时间: 2018-8-16 21:52
XMX64311,有时间的话,请提供一点你的真实情形的代码(局部的),否则一切都是空谈。别人也没办法模拟你的真实情形。
作者: XMX64311    时间: 2018-8-23 08:37
Private Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long



Private Sub Form_Load()




Me.frmAndonXTsub.Requery

Me.frmAndonXTsub.Width = Me.WindowWidth - 600

Me.Text1 = DCount("*", "qforAndonXT", "问题类别=1")

Me.Text1.Requery

Me.Text2 = DCount("*", "qforAndonXT", "问题类别=2")

Me.Text2.Requery

Me.Text3 = DCount("*", "qforAndonXT", "问题类别=3")

Me.Text3.Requery

Me.Text4 = DCount("*", "qforAndonXT", "问题类别=4")

Me.Text4.Requery

Me.Text5 = DCount("*", "qforAndonXT", "问题类别=5")

Me.Text5.Requery


Me.Child1.Requery
Me.Child2.Requery
Me.Child3.Requery
Me.Child4.Requery
Me.Child5.Requery
Me.Child6.Requery
Me.Child7.Requery
Me.Child8.Requery
Me.Child10.Requery
Me.Child11.Requery
Me.Child12.Requery
Me.Child13.Requery
Me.Child14.Requery
Me.Child15.Requery
Me.Child16.Requery
Me.Child17.Requery
Me.Child18.Requery
Me.Child19.Requery
Me.Child20.Requery
Me.Child21.Requery
Me.Child22.Requery
Me.Child23.Requery
Me.Child24.Requery
Me.Child25.Requery
Me.Child26.Requery
Me.Child27.Requery
Me.Child28.Requery
Me.Child29.Requery
Me.Child30.Requery
Me.Child31.Requery
Me.Child32.Requery
Me.Child33.Requery






End Sub

Private Sub Form_Open(Cancel As Integer)

DoCmd.ShowToolbar "Ribbon", acToolbarNo


DoCmd.Maximize

End Sub

Private Sub Form_Timer()

DoCmd.OpenForm "frmAndonXT1"
DoCmd.close acForm, "frmAndonXT"

Call SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1)


End Sub


frmAndonXT和frmAndonXT1来回切换,frmAndonXT1的对象和frmAndonXT是完全一样的,我本来是做计时器时间到再打开它自己的,不行,才做了一个窗体frmAndonXT1,对象和frmAndonXT一样的!





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3