Export (0) Print
Expand All

InstanceData Class

Holds instance data associated with a performance counter sample.

System::Object
  System.Diagnostics::InstanceData

Namespace:  System.Diagnostics
Assembly:  System (in System.dll)

public ref class InstanceData

The InstanceData type exposes the following members.

  NameDescription
Public methodInstanceDataInitializes a new instance of the InstanceData class, using the specified sample and performance counter instance.
Top

  NameDescription
Public propertyInstanceNameGets the instance name associated with this instance data.
Public propertyRawValueGets the raw data value associated with the performance counter sample.
Public propertySampleGets the performance counter sample that generated this data.
Top

  NameDescription
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

The following code example displays the contents of the InstanceData objects that exist in a particular PerformanceCounterCategory on the local computer. It first displays a numbered list of PerformanceCounter categories. After the user enters the number of one of the categories, the sample displays, for each PerformanceCounter in the PerformanceCounterCategory, the instance data associated with each instance of the PerformanceCounter.

// InstanceData_CopyTo.cpp : main project file.
#using <System.dll>

using namespace System;
using namespace System::Diagnostics;


/////////////////////////////////////////////////////////////////////// 
// 
// FORWARD DECLARATIONS 
// 
/////////////////////////////////////////////////////////////////////// 

// Console Utility Functions: 
void InitConsole();                          // Init console size 
void TitleBlock();                           // Write the title block 
void CW(String^strText ,                    // Write a colored string
        String^ C = "", int LF = 1);


// InstanceData subroutines 
// Display the contents of an InstanceData object. 
void ProcessInstanceDataObject(String^ name, CounterSample CSRef);

// Display the contents of an InstanceDataCollection. 
void ProcessInstanceDataCollection(InstanceDataCollection^ idCol);




/////////////////////////////////////////////////////////////////////// 
// 
// MAIN PROGRAM 
// 
/////////////////////////////////////////////////////////////////////// 

void main()
{
    InitConsole();
    TitleBlock();

    String^ categoryName;
    String^ catNumStr;
    int      categoryNum;


    array<PerformanceCounterCategory^>^ categories =
                PerformanceCounterCategory::GetCategories();

    // Create and sort an array of category names. 
    array<String^>^ categoryNames = gcnew array<String^>(categories->Length);
    int catX;
    for(catX=0; catX < categories->Length; catX++)
            categoryNames[catX] = categories[catX]->CategoryName;
    Array::Sort(categoryNames);

    while(1)
    {
    CW("These PerformanceCounterCategory categories are registered \n"
      +"on this computer:","Red");

    for(catX=0; catX < categories->Length; catX++)
            Console::WriteLine("{0,4} - {1}", catX+1, categoryNames[catX]);

    // Ask the user to choose a category.
    Console::Write("\nEnter a category number from the above list: ");
    catNumStr = Console::ReadLine();

    // Validate the entered category number. 
    try {
        categoryNum = int::Parse(catNumStr);
        if (categoryNum < 1 || categoryNum > categories->Length)
            throw gcnew Exception(String::Format("The category number "+
                  " must be in the range 1..{0}.", categories->Length));
        categoryName = categoryNames[(categoryNum-1)];

        // Process the InstanceDataCollectionCollection for this category.
        PerformanceCounterCategory^ pcc =
             gcnew PerformanceCounterCategory(categoryName);
        InstanceDataCollectionCollection^ idColCol = pcc->ReadCategory();
        array<InstanceDataCollection^>^ idColArray =
             gcnew array<InstanceDataCollection^>(idColCol->Count);

        CW("\nInstanceDataCollectionCollection for \"" +categoryName+"\" "
           +"has "+idColCol->Count+" elements.","Blue");

        idColCol->CopyTo(idColArray, 0);

        for each ( InstanceDataCollection ^ idCol in idColArray )
                ProcessInstanceDataCollection(idCol);
        }
    catch(Exception^ ex)
        {
        Console::WriteLine("\"{0}\" is not a valid category number." +
            "\n{1}", catNumStr, ex->Message);
        }

    CW("\n\nRun again (Y,N)?","Yellow");
    catNumStr = Console::ReadLine();
    if ("Y" != catNumStr && "y" != catNumStr) break;
    }
}


/////////////////////////////////////////////////////////////////////// 
// 
// SUBROUTINES 
// 
/////////////////////////////////////////////////////////////////////// 

void InitConsole() 
{
  Console::BufferHeight = 4000;
  Console::WindowHeight = 40;
}

void TitleBlock()
{
Console::Title = "InstDataCopyTo.cpp Sample";

CW(
 "///////////////////////////////////////////////////////////////////\n"
+"//\n"
+"//  PROGRAM   instdatacopyto.cpp\n"
+"//  PURPOSE   Show how to use InstanceData objects\n"
+"//  OUTPUT    1) Displays a numbered list of PerformanceCounter\n"
+"//               categories that exist on the local computer.\n"
+"//            2) Prompts the user to select a category.\n"
+"//            3) Displays the instance data associated with each\n"
+"//               instance of the PerformanceCounter in the\n"
+"//               selected PerformanceCounterCategory\n"
+"//\n"
+ "///////////////////////////////////////////////////////////////////\n"
,"Yellow");
}


// Utility function:  ConsoleWrite:  Write a colored string 
void CW(String^ strText , String^ C, int LF)
{
   if (C != "") Console::ForegroundColor =  *dynamic_cast<ConsoleColor^>
                               (Enum::Parse(ConsoleColor::typeid, C));
   Console::Write(strText);
   Console::ResetColor();
   Console::Write("\n{0}",LF?"\n":"");
}

// Display the contents of an InstanceDataCollection. 
void ProcessInstanceDataCollection(InstanceDataCollection ^ idCol)
{
    array<InstanceData^>^ instDataArray = gcnew array<InstanceData^>(idCol->Count);

    CW("\n  InstanceDataCollection for \""
       + idCol->CounterName + "\" has " + idCol->Count + " elements.", "Red");

    // Copy and process the InstanceData array.
    idCol->CopyTo(instDataArray, 0);

    int idX;
    for(idX=0; idX < instDataArray->Length; idX++)
        ProcessInstanceDataObject(instDataArray[idX]->InstanceName,
        instDataArray[idX]->Sample);
}


// Display the contents of an InstanceData object. 
void ProcessInstanceDataObject(String ^ name, CounterSample CSRef)
{
    InstanceData ^ instData = gcnew InstanceData(name, CSRef);
    CW("    Data from InstanceData object:","Red",0);

    CW("      InstanceName:     "+instData->InstanceName,"Green",0);
    CW("      RawValue:         " + instData->RawValue);

    CounterSample sample = instData->Sample;
    Console::Write("    Data from CounterSample object:\n" +
        "      CounterType:      {0,-27} SystemFrequency:  {1}\n" +
        "      BaseValue:        {2,-27} RawValue:         {3}\n" +
        "      CounterFrequency: {4,-27} CounterTimeStamp: {5}\n" +
        "      TimeStamp:        {6,-27} TimeStamp100nSec: {7}\n\n",
        sample.CounterType, sample.SystemFrequency, sample.BaseValue,
        sample.RawValue, sample.CounterFrequency, sample.CounterTimeStamp,
        sample.TimeStamp, sample.TimeStamp100nSec);
}

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft