3

私のチームは、MDB プロジェクトがあるアクセス 2000 で作業していました。このアプリケーション (ERP) は、約 20 のアクセス フォームを開くことができます。システム全体を Access 2010 の新しい形式 *.accdb に移行することを決定したら、最近では約100MBのメモリが少ないため、この問題が発生しています。

アクセス 2010 プロジェクトのメモリ制限を増やすためにたどることができる回避策はありますか。

問題の流れ: 初期フォームにログイン名とパスワードを入力し、フォーム (アクセスフォームからのフォーム、文字通り) を開き始めます。約 10 フォームで、Acess 2010 が使用するメモリが 107MB に達し、次のフォームを開くと、次のエラーでシステムがクラッシュします:「3035 説明 システム リソースが超過しました」

4

4 に答える 4

6

この問題は、32 ビット アクセスが 32 ビット Windows の仮想メモリの制限 (アプリごとに 2 GB) を超えているために発生します。Windows XP でこの問題が発生しない理由がわかりません (テストする時間がありませんでした)。

パフォーマンス モニターまたはアクセス アプリのコードを使用して、VM の使用状況を追跡できます。フォームが開くと、アクセスが途切れるまで VM の使用率が上昇することがわかります。

解決策は、Windows 64 ビットで Access 64 ビットに切り替えることです。外部 dll 呼び出しがある場合は、64 ビット用に書き直す必要があることに注意してください。また、ActiveX コントロールは 64 ビットである必要があります。


VM を追跡するコード

Declare PtrSafe Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

Public Type MEMORYSTATUS
   dwLength As Long
   dwMemoryLoad As Long
   dwTotalPhys As Long
   dwAvailPhys As Long
   dwTotalPageFile As Long
   dwAvailPageFile As Long
   dwTotalVirtual As Long
   dwAvailVirtual As Long
End Type

Function ReturnVirtualMemory() As Long

    Dim Mem as MEMORYSTATUS

    Mem.dwLength = Len(Mem)
    GlobalMemoryStatus Mem

    ReturnVirtualMemory = Mem.dwTotalVirtual - Mem.dwAvailVirtual
End Function
于 2013-11-16T17:36:03.443 に答える
3

これは私と同じように役立つかもしれません: すべてのドライブでシステム管理のページングを有効にします。このため、

  1. 「マイ コンピュータ」アイコンを右クリックし、「プロパティ」を選択します。
  2. [システムの詳細設定] > [詳細設定] > [設定] > [詳細設定] > [変更] に移動します。
  3. [ページングを自動的に管理する...] のチェックを外し、すべてのドライブを 1 つずつ選択して、それぞれに [システム管理サイズ] を設定します。
  4. [OK]を押して完了です。

スクリーンショットの例

于 2016-07-27T07:00:22.610 に答える
2

Mint が提供する VM 追跡コードを基にして、VM が問題を引き起こし始めるポイントに近づいたときに警告し、再起動を推奨するアプリケーション用の一種の「早期警告」システムを作成しました。少し面倒ですが、誰かが 64 ビット OS 環境で 32 ビット Office を実行するためのより良い解決策を思い付くまで、それを実行する必要があります。

ReturnVM:仮想メモリの使用量を GB 単位で返し、1.425GB を超えるとアラートをトリガーします。これは、再起動する前に作業を完了する余裕を与えながら、再起動の間にできるだけ多くの時間を与えるアプリケーションで機能することがわかりました。必要に応じて自由に調整してください。

os_Restart:アクティブな Access プロセスを強制終了し、残った laccdb ファイルを削除し、アプリケーションを再起動するバッチ ファイルを書き込みます (すべてがユーザーのデスクトップにある場合)。ファイルを書き込んだ後、バッチを実行します。別の関数は、アプリケーションの開始時にこのファイルを削除します。

TempVars!tv_WinUID = Environ("ユーザー名")

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
于 2014-12-09T22:18:08.853 に答える
2

数か月のフラストレーションの後、Access 2010 と Access 2013 の両方で、この問題の原因と解決策を見つけました。プログラムの実行時に Skype をバックグラウンドで読み込むと、大規模なクエリと圧縮および修復の両方で「システム リソースの超過エラー」が発生しました。

それでも問題が解決しない場合は、Windows XP 互換モードで実行してください

于 2015-02-06T17:19:32.060 に答える