Windows性能计数器应用(PART4)

Windows性能计数器应用(PART1)app

Windows性能计数器应用(PART2)ide

Windows性能计数器应用(PART3)性能

SysField.XML文件指定在日志文件中存储PerformanceCounter()值所需的全部参数以及性能计数器的采样时间。spa

:应用程序存储日志文件的文件夹。debug

:日志文件的文件名。日志

:指定一个布尔值orm

:单个日志文件存储的最大记录数xml

PerformanceCounter()的采样间隔get

为了天天生成一个日志文件,咱们须要将MaxNumberRecordsInLogFile设置为等于:string

MaxNumberRecordsInLogFile =(一天中的第二个)/ PollingSysParamsInterval

若是咱们每1秒采样一次(PollingSysParamsInterval = 1),则MaxNumberRecordsInLogFile = 86400secondi /(1秒)= 86400

使用存储在app.config中的参数能够定义咱们要包含在采样中的性能参数以及性能计数器的结构(顺序)。

app.config的完整结构报告以下:

<?xml version =“ 1.0”?>

<Start>

<ADD key=“ NodeName”value=“ false” />

<ADD key=“ CPUProcessorTime”value=“ true” />

<ADD key=“ CPUPrivilegedTime”value=“ true” />

<ADD key =“ MEMPoolNonPaged” value =“ true” />

<ADD key =“ DISKTime” value =“ true” />

<ADD key =“ HANDLECountCounter” value =“ true” />

<ADD key =“ THREADCount” value =“ true“ />

<ADD key =“ CONTENTSwitches” value =“ true” />

<ADD key =“ SYSTEMCalls” value =“ true” />

<ADD key =“ NumProcess” value =“ true” />

<ADD key =“ NetTrafficSend” value = “ true” /

键值的含义是比较清楚的,与每一个键关联的值是布尔值:

  • 等于“ true ”的值表示跟踪性能计数器的值

  • 等于“ false ”的值表示能够跳过性能计数器的值  

编译应用程序时,Visual Studio将在bin \ debug文件夹中自动建立一个名为<您的应用程序名称> .exe.config的文件。编译应用程序时,app.config的内容将自动复制到此新的配置文件中。当将应用程序交付给最终用户时,您必须交付exe和名为<您的应用程序名称> .exe.config的新配置文件,而不是app.config。用户能够在<您的应用程序名称> .exe.config中修改数据从新启动后,文件和应用程序将从配置文件读取数据。在app.config中更改(key,value)的顺序可肯定将性能计数器的其余顺序打印到控制台和日志文件中。

该项目使用名为SysParams的公共类来存储全部性能计数器。

public class SysParams

{

public string NodeName { get; set; }

public float CPUProcessorTime { get; set; }

public float CPUPrivilegedTime { get; set; }

public float CPUInterruptTime { get; set; }

public float CPUDPCTime { get; set; }

public float MEMAvailable { get; set; }

public float MEMCommited { get; set; }

public float MEMCommitLimit { get; set; }

public float MEMCommitedPerc { get; set; }

public float MEMPoolPaged { get; set; }

public float MEMPoolNonPaged { get; set; }

public float MEMCached { get; set; }

public float PageFile { get; set; }

public float ProcessorQueueLengh { get; set; }

public float DISCQueueLengh { get; set; }

public float DISKRead {get; set;}

public float DISKWrite { get; set; }

public float DISKAverageTimeRead { get; set; }

public float DISKAverageTimeWrite { get; set; }

public float DISKTime { get; set; }

public float HANDLECountCounter { get; set; }

public float THREADCount { get; set; }

public int CONTENTSwitches { get; set; }

public int SYSTEMCalls { get; set; }

public float NetTrafficSend { get; set; }

public float NetTrafficReceive { get; set; }

public DateTime SamplingTime { get; set; }

 

private PerformanceCounter cpuProcessorTime = new PerformanceCounter("Processor", "% Processor Time", "_Total");

private PerformanceCounter cpuPrivilegedTime = new PerformanceCounter("Processor", "% Privileged Time", "_Total");

private PerformanceCounter cpuInterruptTime = new PerformanceCounter("Processor", "% Interrupt Time", "_Total");

private PerformanceCounter cpuDPCTime = new PerformanceCounter("Processor", "% DPC Time", "_Total");

private PerformanceCounter memAvailable = new PerformanceCounter("Memory", "Available MBytes", null);

private PerformanceCounter memCommited = new PerformanceCounter("Memory", "Committed Bytes", null);

private PerformanceCounter memCommitLimit = new PerformanceCounter("Memory", "Commit Limit", null);

private PerformanceCounter memCommitedPerc = new PerformanceCounter("Memory", "% Committed Bytes In Use", null);

private PerformanceCounter memPollPaged = new PerformanceCounter("Memory", "Pool Paged Bytes", null);

private PerformanceCounter memPollNonPaged = new PerformanceCounter("Memory", "Pool Nonpaged Bytes", null);

private PerformanceCounter memCached = new PerformanceCounter("Memory", "Cache Bytes", null);

private PerformanceCounter pageFile = new PerformanceCounter("Paging File", "% Usage", "_Total");

private PerformanceCounter processorQueueLengh = new PerformanceCounter("System", "Processor Queue Length", null);

private PerformanceCounter diskQueueLengh = new PerformanceCounter("PhysicalDisk", "Avg. Disk Queue Length", "_Total");

private PerformanceCounter diskRead = new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "_Total");

private PerformanceCounter diskWrite = new PerformanceCounter("PhysicalDisk", "Disk Write Bytes/sec", "_Total");

private PerformanceCounter diskAverageTimeRead = new PerformanceCounter("PhysicalDisk", "Avg. Disk sec/Read", "_Total");

private PerformanceCounter diskAverageTimeWrite = new PerformanceCounter("PhysicalDisk", "Avg. Disk sec/Write", "_Total");

private PerformanceCounter diskTime = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");

private PerformanceCounter handleCountCounter = new PerformanceCounter("Process", "Handle Count", "_Total");

private PerformanceCounter threadCount = new PerformanceCounter("Process", "Thread Count", "_Total");

private PerformanceCounter contentSwitches = new PerformanceCounter("System", "Context Switches/sec", null);

private PerformanceCounter systemCalls = new PerformanceCounter("System", "System Calls/sec", null);

private PerformanceCounterCategory performanceNetCounterCategory;

private PerformanceCounter[] trafficSentCounters;

private PerformanceCounter[] trafficReceivedCounters;

private string[] interfaces = null;

public void initNetCounters()

 

Windows性能计数器应用(PART1)

Windows性能计数器应用(PART2)

Windows性能计数器应用(PART3)

Windows性能计数器应用(PART5)

相关文章
相关标签/搜索