Win32 API 日本語リファレンス
ホームSystem.Diagnostics.ProcessSnapshotting › PSS_PERFORMANCE_COUNTERS

PSS_PERFORMANCE_COUNTERS

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

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

フィールド

フィールドサイズx64x86説明
TotalCycleCountULONGLONG8+0+0スナップショット処理全体のCPUサイクル数。
TotalWallClockPeriodULONGLONG8+8+8スナップショット処理全体の経過時間。
VaCloneCycleCountULONGLONG8+16+16VAクローン処理のCPUサイクル数。
VaCloneWallClockPeriodULONGLONG8+24+24VAクローン処理の経過時間。
VaSpaceCycleCountULONGLONG8+32+32VA空間キャプチャのCPUサイクル数。
VaSpaceWallClockPeriodULONGLONG8+40+40VA空間キャプチャの経過時間。
AuxPagesCycleCountULONGLONG8+48+48補助ページキャプチャのCPUサイクル数。
AuxPagesWallClockPeriodULONGLONG8+56+56補助ページキャプチャの経過時間。
HandlesCycleCountULONGLONG8+64+64ハンドルキャプチャのCPUサイクル数。
HandlesWallClockPeriodULONGLONG8+72+72ハンドルキャプチャの経過時間。
ThreadsCycleCountULONGLONG8+80+80スレッドキャプチャのCPUサイクル数。
ThreadsWallClockPeriodULONGLONG8+88+88スレッドキャプチャの経過時間。

各言語での定義

#include <windows.h>

// PSS_PERFORMANCE_COUNTERS  (x64 96 / x86 96 バイト)
typedef struct PSS_PERFORMANCE_COUNTERS {
    ULONGLONG TotalCycleCount;
    ULONGLONG TotalWallClockPeriod;
    ULONGLONG VaCloneCycleCount;
    ULONGLONG VaCloneWallClockPeriod;
    ULONGLONG VaSpaceCycleCount;
    ULONGLONG VaSpaceWallClockPeriod;
    ULONGLONG AuxPagesCycleCount;
    ULONGLONG AuxPagesWallClockPeriod;
    ULONGLONG HandlesCycleCount;
    ULONGLONG HandlesWallClockPeriod;
    ULONGLONG ThreadsCycleCount;
    ULONGLONG ThreadsWallClockPeriod;
} PSS_PERFORMANCE_COUNTERS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PSS_PERFORMANCE_COUNTERS
{
    public ulong TotalCycleCount;
    public ulong TotalWallClockPeriod;
    public ulong VaCloneCycleCount;
    public ulong VaCloneWallClockPeriod;
    public ulong VaSpaceCycleCount;
    public ulong VaSpaceWallClockPeriod;
    public ulong AuxPagesCycleCount;
    public ulong AuxPagesWallClockPeriod;
    public ulong HandlesCycleCount;
    public ulong HandlesWallClockPeriod;
    public ulong ThreadsCycleCount;
    public ulong ThreadsWallClockPeriod;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PSS_PERFORMANCE_COUNTERS
    Public TotalCycleCount As ULong
    Public TotalWallClockPeriod As ULong
    Public VaCloneCycleCount As ULong
    Public VaCloneWallClockPeriod As ULong
    Public VaSpaceCycleCount As ULong
    Public VaSpaceWallClockPeriod As ULong
    Public AuxPagesCycleCount As ULong
    Public AuxPagesWallClockPeriod As ULong
    Public HandlesCycleCount As ULong
    Public HandlesWallClockPeriod As ULong
    Public ThreadsCycleCount As ULong
    Public ThreadsWallClockPeriod As ULong
End Structure
import ctypes
from ctypes import wintypes

class PSS_PERFORMANCE_COUNTERS(ctypes.Structure):
    _fields_ = [
        ("TotalCycleCount", ctypes.c_ulonglong),
        ("TotalWallClockPeriod", ctypes.c_ulonglong),
        ("VaCloneCycleCount", ctypes.c_ulonglong),
        ("VaCloneWallClockPeriod", ctypes.c_ulonglong),
        ("VaSpaceCycleCount", ctypes.c_ulonglong),
        ("VaSpaceWallClockPeriod", ctypes.c_ulonglong),
        ("AuxPagesCycleCount", ctypes.c_ulonglong),
        ("AuxPagesWallClockPeriod", ctypes.c_ulonglong),
        ("HandlesCycleCount", ctypes.c_ulonglong),
        ("HandlesWallClockPeriod", ctypes.c_ulonglong),
        ("ThreadsCycleCount", ctypes.c_ulonglong),
        ("ThreadsWallClockPeriod", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct PSS_PERFORMANCE_COUNTERS {
    pub TotalCycleCount: u64,
    pub TotalWallClockPeriod: u64,
    pub VaCloneCycleCount: u64,
    pub VaCloneWallClockPeriod: u64,
    pub VaSpaceCycleCount: u64,
    pub VaSpaceWallClockPeriod: u64,
    pub AuxPagesCycleCount: u64,
    pub AuxPagesWallClockPeriod: u64,
    pub HandlesCycleCount: u64,
    pub HandlesWallClockPeriod: u64,
    pub ThreadsCycleCount: u64,
    pub ThreadsWallClockPeriod: u64,
}
import "golang.org/x/sys/windows"

type PSS_PERFORMANCE_COUNTERS struct {
	TotalCycleCount uint64
	TotalWallClockPeriod uint64
	VaCloneCycleCount uint64
	VaCloneWallClockPeriod uint64
	VaSpaceCycleCount uint64
	VaSpaceWallClockPeriod uint64
	AuxPagesCycleCount uint64
	AuxPagesWallClockPeriod uint64
	HandlesCycleCount uint64
	HandlesWallClockPeriod uint64
	ThreadsCycleCount uint64
	ThreadsWallClockPeriod uint64
}
type
  PSS_PERFORMANCE_COUNTERS = record
    TotalCycleCount: UInt64;
    TotalWallClockPeriod: UInt64;
    VaCloneCycleCount: UInt64;
    VaCloneWallClockPeriod: UInt64;
    VaSpaceCycleCount: UInt64;
    VaSpaceWallClockPeriod: UInt64;
    AuxPagesCycleCount: UInt64;
    AuxPagesWallClockPeriod: UInt64;
    HandlesCycleCount: UInt64;
    HandlesWallClockPeriod: UInt64;
    ThreadsCycleCount: UInt64;
    ThreadsWallClockPeriod: UInt64;
  end;
const PSS_PERFORMANCE_COUNTERS = extern struct {
    TotalCycleCount: u64,
    TotalWallClockPeriod: u64,
    VaCloneCycleCount: u64,
    VaCloneWallClockPeriod: u64,
    VaSpaceCycleCount: u64,
    VaSpaceWallClockPeriod: u64,
    AuxPagesCycleCount: u64,
    AuxPagesWallClockPeriod: u64,
    HandlesCycleCount: u64,
    HandlesWallClockPeriod: u64,
    ThreadsCycleCount: u64,
    ThreadsWallClockPeriod: u64,
};
type
  PSS_PERFORMANCE_COUNTERS {.bycopy.} = object
    TotalCycleCount: uint64
    TotalWallClockPeriod: uint64
    VaCloneCycleCount: uint64
    VaCloneWallClockPeriod: uint64
    VaSpaceCycleCount: uint64
    VaSpaceWallClockPeriod: uint64
    AuxPagesCycleCount: uint64
    AuxPagesWallClockPeriod: uint64
    HandlesCycleCount: uint64
    HandlesWallClockPeriod: uint64
    ThreadsCycleCount: uint64
    ThreadsWallClockPeriod: uint64
struct PSS_PERFORMANCE_COUNTERS
{
    ulong TotalCycleCount;
    ulong TotalWallClockPeriod;
    ulong VaCloneCycleCount;
    ulong VaCloneWallClockPeriod;
    ulong VaSpaceCycleCount;
    ulong VaSpaceWallClockPeriod;
    ulong AuxPagesCycleCount;
    ulong AuxPagesWallClockPeriod;
    ulong HandlesCycleCount;
    ulong HandlesWallClockPeriod;
    ulong ThreadsCycleCount;
    ulong ThreadsWallClockPeriod;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PSS_PERFORMANCE_COUNTERS サイズ: 96 バイト(x64)
dim st, 24    ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; TotalCycleCount : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; TotalWallClockPeriod : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; VaCloneCycleCount : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; VaCloneWallClockPeriod : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; VaSpaceCycleCount : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; VaSpaceWallClockPeriod : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; AuxPagesCycleCount : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; AuxPagesWallClockPeriod : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; HandlesCycleCount : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; HandlesWallClockPeriod : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ThreadsCycleCount : ULONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; ThreadsWallClockPeriod : ULONGLONG (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PSS_PERFORMANCE_COUNTERS
    #field int64 TotalCycleCount
    #field int64 TotalWallClockPeriod
    #field int64 VaCloneCycleCount
    #field int64 VaCloneWallClockPeriod
    #field int64 VaSpaceCycleCount
    #field int64 VaSpaceWallClockPeriod
    #field int64 AuxPagesCycleCount
    #field int64 AuxPagesWallClockPeriod
    #field int64 HandlesCycleCount
    #field int64 HandlesWallClockPeriod
    #field int64 ThreadsCycleCount
    #field int64 ThreadsWallClockPeriod
#endstruct

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