Silverlight 3 – Performance del CPU

Al crear una aplicación siempre tenemos que tener presente la performance de la misma, en este sentido el hecho del uso del procesador es una cuestión más que importante.

La clase Analytics nos permite conocer en el momento que necesitemos, cual es el uso de CPU que tiene actualmente la máquina y cuanto esta siendo utilizado por nuestra aplicación.

La clase tiene dos propiedades

  • AverageProcessLoad – el uso de CPU de todos los procesos
  • AverageProcessorLoad – el uso de CPU de la aplicación

La clase además tiene una colección que nos proporciona la información de los procesadores GPU. Este objeto GpuInformation contiene las siguientes propiedades

  • DeviceId – ID del dispositivo GPU
  • VendorId – Proveedor del dispositivo GPU
  • DriverVersion – Versión del driver del dispositivo GPU

De esta manera podemos visualizar información relacionada con la performance directamente en nuestra aplicación.

Vamos a mostrar como podemos implementarlo.

Primero generamos un XAML donde vamos a mostrar todos los datos de la clase Analytics.

<Grid x:Name="LayoutRoot" Background="#FFDCC2C2">
  
  <Grid.RowDefinitions>
      <RowDefinition Height="75"/>
      <RowDefinition Height="75"/>
    <RowDefinition Height="150"/>
  </Grid.RowDefinitions>
 
    <StackPanel Grid.Row="0" Background="#FF9B6666">
        <TextBlock Text="Uso total de CPU" FontSize="22"/>
        <TextBlock x:Name="txtCPULoad" FontSize="30"/>            
    </StackPanel>
 
    <StackPanel Grid.Row="1" Background="#FF507244">
        <TextBlock Text="Uso de App Silverlight" FontSize="22"/>
        <TextBlock x:Name="txtSLCPULoad" FontSize="30"/>
    </StackPanel>
  
    <StackPanel Grid.Row="2" Background="#FF7F8EA9">
        <TextBlock Text="Device" FontSize="15"/>
        <TextBlock x:Name="txtGPUDevice" FontSize="15"/>
        <TextBlock Text="Vendor" FontSize="15"/>
        <TextBlock x:Name="txtGPUVendor" FontSize="15"/>
        <TextBlock Text="DriverVersion" FontSize="15"/>
        <TextBlock x:Name="txtGPUDriverVersion" FontSize="15"/>
    </StackPanel>
 
</Grid>

Ahora vamos a lo importante que es el código fuente. Vamos a definir una variable del tipo Analytics que es la que vamos a utilizar en nuestra aplicación.

private Analytics performanceAnalytics;

Luego, al inicializarse la aplicación, creamos la clase y generamos un DispatcherTimer que vaya indicando cada 1 segundo la performance.

performanceAnalytics = new Analytics();
 
txtGPUDevice.Text = performanceAnalytics.GpuCollection[0].DeviceId.ToString();
txtGPUVendor.Text = performanceAnalytics.GpuCollection[0].VendorId.ToString();
txtGPUDriverVersion.Text = performanceAnalytics.GpuCollection[0].DriverVersion;
 
DispatcherTimer timerTest = new DispatcherTimer();
 
timerTest.Interval = TimeSpan.FromSeconds(1);
timerTest.Tick += new EventHandler(timerTest_Tick);
 
timerTest.Start();
Vemos que también ya agregamos la información del GPU.

Ahora agregamos la función que cada 1 segundo muestra el uso de CPU.

private void timerTest_Tick(object sender, EventArgs e)
{
    txtCPULoad.Text = string.Concat(performanceAnalytics.AverageProcessorLoad.ToString(), "%");
    txtSLCPULoad.Text = string.Concat(performanceAnalytics.AverageProcessLoad.ToString(), "%");
}

Les muestro un screen de la aplicación.

1Pueden descargar el proyecto aquí.

No Comments