|
說明
在NT系統下,Windows有提供一些簡單的統計值 可以試著打開工作管理員 如果沒有分頁錯誤欄位可以選擇 檢視->選擇欄位 就可以加上分頁錯誤的欄位 分頁錯誤對於系統效能影響很大 對於一些記憶體管理程式而言這個統計值相當重要
程式
Option Explicit Private Type PROCESS_MEMORY_COUNTERS cb As Long PageFaultCount As Long PeakWorkingSetSize As Long WorkingSetSize As Long
QuotaPeakPagedPoolUsage As Long QuotaPagedPoolUsage As Long QuotaPeakNonPagedPoolUsage As Long QuotaNonPagedPoolUsage As Long
PagefileUsage As Long PeakPagefileUsage As Long End Type
Private Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess
As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As
Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Sub Command1_Click() Dim hAppWnd As Long, hAppProcessID As Long, hAppProcess As Long, PMI As PROCESS_MEMORY_COUNTERS hAppWnd = FindWindow(vbNullString, Text1.Text)
GetWindowThreadProcessId hAppWnd, hAppProcessID hAppProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0&, hAppProcessID) PMI.cb = LenB(PMI) GetProcessMemoryInfo hAppProcess, PMI, PMI.cb CloseHandle hAppProcess
MsgBox "Page Fault次數為" & PMI.PageFaultCount End Sub 註:眼尖的讀者可能會發現GetProcessMemoryInfo可取得的統計值不只是Page Fault 還有PeakWorkingSetSize,WorkingSetSize...等等 我本來想一起寫出來的 但
是標題很難命名 若是統稱為如何取得記憶體統計資訊 讀者可能看不出內部有Page Faule等等資訊 因此只好累一點 多用幾個篇幅了
文件出處
整理時間
|