** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - VBA: Rendimiento - RAM
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoVBA: Rendimiento - RAM

 Responder Responder
Autor
Mensaje
genoma111 Ver desplegable
Administrador
Administrador
Avatar

Unido: 28/Marzo/2011
Localización: ...
Estado: Sin conexión
Puntos: 3248
Enlace directo a este mensaje Tema: VBA: Rendimiento - RAM
    Enviado: 09/Febrero/2014 a las 11:54
Esta función me resultó supremamente útil para descubrir "goteos" de memoria.
Fuente: http://www.andreavb.com/forum/viewtopic_5309.html
Básicamente uno la llama desde puntos clave de la aplicación volcando los resultados del tamaño del "WorkingSetSize" a un archivo log para su revisión.

Mi único aporte es haberla traducido a x64:


Option Compare Database
Option Explicit

    Const PROCESS_QUERY_INFORMATION = 1024
    Const PROCESS_VM_READ = 16
   
    Type PROCESS_MEMORY_COUNTERS
        cb As Long
        PageFaultCount As Long
        PeakWorkingSetSize As LongLong
        WorkingSetSize As LongLong
        QuotaPeakPagedPoolUsage As LongLong
        QuotaPagedPoolUsage As LongLong
        QuotaPeakNonPagedPoolUsage As LongLong
        QuotaNonPagedPoolUsage As LongLong
        PagefileUsage As LongLong
        PeakPagefileUsage As LongLong
    End Type
       
    Declare PtrSafe Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, _
                                                                ByVal bInheritHandle As Boolean, _
                                                                      ByVal dwProcId As Long) As Long
    Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Long
    Declare PtrSafe Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As LongPtr, _
                                                                   ppsmemCounters As PROCESS_MEMORY_COUNTERS, _
                                                                         ByVal cb As Long) As Long


Public Function GetMemoryUsage() As Long
    Dim pID As Long
    Dim pHandle As Long
    Dim PMC As PROCESS_MEMORY_COUNTERS

    pID = GetCurrentProcessId
    pHandle = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, pID)
    PMC.cb = LenB(PMC)
    GetProcessMemoryInfo pHandle, PMC, PMC.cb
    GetMemoryUsage = CLng(PMC.WorkingSetSize / 1024)
End Function

"To VBA or not to VBA... that's the question" DFP
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable