Win32 API 日本語リファレンス
ホームSystem.ProcessStatus › PERFORMANCE_INFORMATION

PERFORMANCE_INFORMATION

構造体
サイズx64: 104 バイト / x86: 56 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
cbDWORD4+0+0この構造体のサイズ (バイト単位)。
CommitTotalUINT_PTR8/4+8+4システムによって現在コミットされているページ数。ページをコミットすると (VirtualAllocMEM_COMMIT 付きで使用)、この値は直ちに変化しますが、ページがアクセスされるまで物理メモリは実際には消費されません。
CommitLimitUINT_PTR8/4+16+8ページング ファイルを拡張することなくシステムがコミットできる現在の最大ページ数。この値は、メモリが追加または削除された場合や、ページ ファイルが拡大・縮小・追加された場合に変化することがあります。ページング ファイルを拡張できる場合、これはソフト リミットです。
CommitPeakUINT_PTR8/4+24+12前回のシステム再起動以降に同時にコミット状態となったページ数の最大値。
PhysicalTotalUINT_PTR8/4+32+16実際の物理メモリの量 (ページ単位)。
PhysicalAvailableUINT_PTR8/4+40+20現在使用可能な物理メモリの量 (ページ単位)。これは、内容を先にディスクへ書き込むことなく直ちに再利用できる物理メモリの量です。スタンバイ リスト、フリー リスト、ゼロ リストのサイズの合計になります。
SystemCacheUINT_PTR8/4+48+24システム キャッシュ メモリの量 (ページ単位)。これは、スタンバイ リストのサイズにシステム ワーキング セットを加えたものです。
KernelTotalUINT_PTR8/4+56+28現在ページ カーネル プールおよび非ページ カーネル プールにあるメモリの合計 (ページ単位)。
KernelPagedUINT_PTR8/4+64+32現在ページ カーネル プールにあるメモリ (ページ単位)。
KernelNonpagedUINT_PTR8/4+72+36現在非ページ カーネル プールにあるメモリ (ページ単位)。
PageSizeUINT_PTR8/4+80+40ページのサイズ (バイト単位)。
HandleCountDWORD4+88+44現在開いているハンドルの数。
ProcessCountDWORD4+92+48現在のプロセス数。
ThreadCountDWORD4+96+52現在のスレッド数。

公式ドキュメント

パフォーマンス情報を格納します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// PERFORMANCE_INFORMATION  (x64 104 / x86 56 バイト)
typedef struct PERFORMANCE_INFORMATION {
    DWORD cb;
    UINT_PTR CommitTotal;
    UINT_PTR CommitLimit;
    UINT_PTR CommitPeak;
    UINT_PTR PhysicalTotal;
    UINT_PTR PhysicalAvailable;
    UINT_PTR SystemCache;
    UINT_PTR KernelTotal;
    UINT_PTR KernelPaged;
    UINT_PTR KernelNonpaged;
    UINT_PTR PageSize;
    DWORD HandleCount;
    DWORD ProcessCount;
    DWORD ThreadCount;
} PERFORMANCE_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PERFORMANCE_INFORMATION
{
    public uint cb;
    public UIntPtr CommitTotal;
    public UIntPtr CommitLimit;
    public UIntPtr CommitPeak;
    public UIntPtr PhysicalTotal;
    public UIntPtr PhysicalAvailable;
    public UIntPtr SystemCache;
    public UIntPtr KernelTotal;
    public UIntPtr KernelPaged;
    public UIntPtr KernelNonpaged;
    public UIntPtr PageSize;
    public uint HandleCount;
    public uint ProcessCount;
    public uint ThreadCount;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PERFORMANCE_INFORMATION
    Public cb As UInteger
    Public CommitTotal As UIntPtr
    Public CommitLimit As UIntPtr
    Public CommitPeak As UIntPtr
    Public PhysicalTotal As UIntPtr
    Public PhysicalAvailable As UIntPtr
    Public SystemCache As UIntPtr
    Public KernelTotal As UIntPtr
    Public KernelPaged As UIntPtr
    Public KernelNonpaged As UIntPtr
    Public PageSize As UIntPtr
    Public HandleCount As UInteger
    Public ProcessCount As UInteger
    Public ThreadCount As UInteger
End Structure
import ctypes
from ctypes import wintypes

class PERFORMANCE_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("cb", wintypes.DWORD),
        ("CommitTotal", ctypes.c_size_t),
        ("CommitLimit", ctypes.c_size_t),
        ("CommitPeak", ctypes.c_size_t),
        ("PhysicalTotal", ctypes.c_size_t),
        ("PhysicalAvailable", ctypes.c_size_t),
        ("SystemCache", ctypes.c_size_t),
        ("KernelTotal", ctypes.c_size_t),
        ("KernelPaged", ctypes.c_size_t),
        ("KernelNonpaged", ctypes.c_size_t),
        ("PageSize", ctypes.c_size_t),
        ("HandleCount", wintypes.DWORD),
        ("ProcessCount", wintypes.DWORD),
        ("ThreadCount", wintypes.DWORD),
    ]
#[repr(C)]
pub struct PERFORMANCE_INFORMATION {
    pub cb: u32,
    pub CommitTotal: usize,
    pub CommitLimit: usize,
    pub CommitPeak: usize,
    pub PhysicalTotal: usize,
    pub PhysicalAvailable: usize,
    pub SystemCache: usize,
    pub KernelTotal: usize,
    pub KernelPaged: usize,
    pub KernelNonpaged: usize,
    pub PageSize: usize,
    pub HandleCount: u32,
    pub ProcessCount: u32,
    pub ThreadCount: u32,
}
import "golang.org/x/sys/windows"

type PERFORMANCE_INFORMATION struct {
	cb uint32
	CommitTotal uintptr
	CommitLimit uintptr
	CommitPeak uintptr
	PhysicalTotal uintptr
	PhysicalAvailable uintptr
	SystemCache uintptr
	KernelTotal uintptr
	KernelPaged uintptr
	KernelNonpaged uintptr
	PageSize uintptr
	HandleCount uint32
	ProcessCount uint32
	ThreadCount uint32
}
type
  PERFORMANCE_INFORMATION = record
    cb: DWORD;
    CommitTotal: NativeUInt;
    CommitLimit: NativeUInt;
    CommitPeak: NativeUInt;
    PhysicalTotal: NativeUInt;
    PhysicalAvailable: NativeUInt;
    SystemCache: NativeUInt;
    KernelTotal: NativeUInt;
    KernelPaged: NativeUInt;
    KernelNonpaged: NativeUInt;
    PageSize: NativeUInt;
    HandleCount: DWORD;
    ProcessCount: DWORD;
    ThreadCount: DWORD;
  end;
const PERFORMANCE_INFORMATION = extern struct {
    cb: u32,
    CommitTotal: usize,
    CommitLimit: usize,
    CommitPeak: usize,
    PhysicalTotal: usize,
    PhysicalAvailable: usize,
    SystemCache: usize,
    KernelTotal: usize,
    KernelPaged: usize,
    KernelNonpaged: usize,
    PageSize: usize,
    HandleCount: u32,
    ProcessCount: u32,
    ThreadCount: u32,
};
type
  PERFORMANCE_INFORMATION {.bycopy.} = object
    cb: uint32
    CommitTotal: uint
    CommitLimit: uint
    CommitPeak: uint
    PhysicalTotal: uint
    PhysicalAvailable: uint
    SystemCache: uint
    KernelTotal: uint
    KernelPaged: uint
    KernelNonpaged: uint
    PageSize: uint
    HandleCount: uint32
    ProcessCount: uint32
    ThreadCount: uint32
struct PERFORMANCE_INFORMATION
{
    uint cb;
    size_t CommitTotal;
    size_t CommitLimit;
    size_t CommitPeak;
    size_t PhysicalTotal;
    size_t PhysicalAvailable;
    size_t SystemCache;
    size_t KernelTotal;
    size_t KernelPaged;
    size_t KernelNonpaged;
    size_t PageSize;
    uint HandleCount;
    uint ProcessCount;
    uint ThreadCount;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PERFORMANCE_INFORMATION サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CommitTotal : UINT_PTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CommitLimit : UINT_PTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; CommitPeak : UINT_PTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; PhysicalTotal : UINT_PTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PhysicalAvailable : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; SystemCache : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; KernelTotal : UINT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; KernelPaged : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; KernelNonpaged : UINT_PTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; PageSize : UINT_PTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; HandleCount : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ProcessCount : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ThreadCount : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PERFORMANCE_INFORMATION サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CommitTotal : UINT_PTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; CommitLimit : UINT_PTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CommitPeak : UINT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; PhysicalTotal : UINT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; PhysicalAvailable : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; SystemCache : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; KernelTotal : UINT_PTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; KernelPaged : UINT_PTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; KernelNonpaged : UINT_PTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; PageSize : UINT_PTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; HandleCount : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ProcessCount : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ThreadCount : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PERFORMANCE_INFORMATION
    #field int cb
    #field intptr CommitTotal
    #field intptr CommitLimit
    #field intptr CommitPeak
    #field intptr PhysicalTotal
    #field intptr PhysicalAvailable
    #field intptr SystemCache
    #field intptr KernelTotal
    #field intptr KernelPaged
    #field intptr KernelNonpaged
    #field intptr PageSize
    #field int HandleCount
    #field int ProcessCount
    #field int ThreadCount
#endstruct

stdim st, PERFORMANCE_INFORMATION        ; NSTRUCT 変数を確保
st->cb = 100
mes "cb=" + st->cb