大厦关闭由造币厂提供的VM跟踪代码,我做了一个排序为我的应用“预警”系统,警告您当VM正在接近开始导致问题并推荐重新启动的点。这有点烦人,但直到有人提出了在64位操作系统环境中运行的32位Office的更好解决方案之前,它必须这样做。
ReturnVM:返回GB中的虚拟内存使用情况,如果超过1.425GB则触发警报。我发现这适用于我的应用程序,在重新启动之间给予尽可能多的时间,同时仍然允许一些余地在重新启动之前完成工作。随时根据需要进行调整。
os_Restart:写入杀死活动的访问过程中一个批处理文件,删除剩余laccdb文件,并重新启动应用程序(提供一切都在用户的桌面上)。写入文件后,它执行批处理。另一个功能是在应用程序启动时删除此文件。
TempVars的!tv_WinUID = ENVIRON(“USERNAME”)
Function ReturnVM() As Double
Dim Mem As MEMORYSTATUS
Dim Result As Integer
Mem.dwLength = Len(Mem)
GlobalMemoryStatus Mem
ReturnVM = Format((Mem.dwTotalVirtual - Mem.dwAvailVirtual)/1073741824, "0.000")
Debug.Print ReturnVM & " GB of VM used."
If (ReturnVM >= 1.425) Then
DoEvents
Result = MsgBox("Office Virtual Memory usage is approaching the pre-set limit." & vbCrLf & vbCrLf & "To prevent a possible crash, please click 'OK' to restart immediately." & vbCrLf & vbCrLf & "You may click 'Cancel' to finish what you're working on, but if you do, please restart the application as soon as possible.", vbOKCancel)
If (Result = vbOK) Then
os_Restart
End If
End If
End Function
Public Function os_Restart()
Dim fso As Object
Dim oFile As Object
Dim BatchContents As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.CreateTextFile("C:\Users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")
BatchContents = "@echo Restarting Application..." & vbCrLf & _
"@echo off" & vbCrLf & _
"taskkill /f /im MSACCESS.EXE" & vbCrLf & _
"ping -n 6 127.0.0.1 > nul" & vbCrLf & _
"del " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.laccdb" & Chr(34) & vbCrLf & _
"start " & Chr(34) & Chr(34) & " " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.accdb" & Chr(34)
DoEvents
'Debug.Print BatchContents
oFile.WriteLine BatchContents
oFile.Close
Set fso = Nothing
Set oFile = Nothing
Call Shell("C:\users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")
End Function
也许你会考虑重新设计的应用程序,所以它并不需要一次打开许多形式。你也可以确定从开放中停止“另外一个表格”实际上运行应用程序。可能你已经打开的一个表单已经占用了内存。 – HelloW
该应用程序非常复杂,我们不能限制表单的数量,因为客户端不想要。我们一直在进行大约一百次的“再一次形式”测试。你是对的,一个打开的表单使用连接内存,发生内存限制问题。 –
我们正在回访2000年,我们无法解决问题。 –