Capítulo 10 – Instrumentación–Parte 2

Lección 3- Monitoreando de la Performance

No importa lo bien que una aplicación se ha diseñado, si no funciona bien, no será bien recibida por los usuarios. De hecho, los problemas de rendimiento a veces pueden ser notablemente más problemático que los errores tradicionales, ya que son muy difíciles de corregir:
  • Interfaz de usuario con pantallas congeladas o bloqueos de aplicaciones.
  • Acceso a la red, conectividad de base de datos, entrada y salida de archivos muy lentas.
La comprensión de cómo cada una de estas obras las áreas es fundamental para escribir las aplicaciones funcionan bien. Sin embargo, una vez que se implementa una aplicación, la vida puede llegar a ser muy complicado.
El espacio de nombres System.Diagnostics proporciona las herramientas necesarias para evitar un enfoque ineficaz para la solución de problemas.

Información general sobre procesos
Un proceso es un trozo de memoria que contiene recursos. Es una tarea aislada realizada por el sistema operativo. Por lo tanto, un proceso posee uno o más hilos del sistema operativo.

La clase process (en namespace System.Diagnostics)
Una instancia de un objeto process puede referenciar a cualquier proceso del sistema operativo, d una maquina local o remota.
 
Enumerando procesos
Hay cuatro métodos principales para determinar qué procesos se están ejecutando en un momento dado o para identificar procesos específicos: el método GetCurrentProcess, el GetProcessById, el GetProcessesByName, y el método GetProcesses.
El más simple es el método GetCurrentProcess que asocia un process con el proceso activo y lo devuelve:

GetProcessById
Este método toma un id y retorna la información si esta es encontrad. En otra sobrecarga, se le pasa el id y el nombre de la máquina:
image

GetProcessByName
Recibe como parámetros el nombre del proceso y de la maquina:image


Usando contadores de Performance
Las consideraciones de rendimiento tienen gran impacto en la aceptación de a aplicación a un usuario. Para asegurarse de que este problema no ocurra, .Net framework provee la clase PerformanceCounter.
image


Los objetos PerformanceCounter permiten la recoger y recuperar datos de una manera limpia y orientada a objetos.Los valores de un objeto PerformanceCounter se almacenan en el Registro de Windows. Las propiedades que identifican un objeto PerformanceCounter son los siguientes:
  • · Nombre de equipo
  • · Nombre Categoría
  • · Categoría de la Instancia
  • · Nombre de contador
 
La clase CounterCreationData
Sirve como un objeto contenedor de todas las propiedades que serán necesarios para crear un objeto PerformanceCounter. La clase CounterCreationData tiene tres propiedades.

Nombre Descripcion
CounterHelp descripción amable de un contador
CounterName Nombre del contador
CounterType Devuelve el PerformanceCounterType del contador

Para crear una nueva instancia de la clase CounterCreationData se debe declarar una nueva instancia del objeto, y setear cada propiedad de forma manual.

image

O con otra sobrecarga del constructor:

image
 
La clase PerformanceCounterCategory
El objetivo principal de la clase PerformanceCounterCategory es administrar y manipular objetos PerformanceCounter y sus categorías. Tiene cinco métodos estáticos:

Create Crea una clase PerfomanceCounterCategory
Delete Elimina una clase PerformanceCounterCategory
Exist Determina si una PerformanceCounterCategory ya existe
GetCategories listas de cada uno de los PerformanceCounterCategories de una máquina dada
ReadCategory Lee todos los datos del contador y el rendimiento asociados a un determinado PeformanceCategory
 
Iniciando procesos
Para que un proceso inicie se llama al método Start. El constructor de la clase Process tiene cinco sobrecargas, de las cuales tres son para los escenarios sin líneas de comando:
 
La clase ProcessStartInfo.
Este código crea una instancia de la clase ProcessStartInfo para iniciar un proceso específico.
image

La segunda sobrecarga toma un solo parámetro de cadena que se corresponde con el nombre de la aplicación. Si la aplicación se instala como un programa, usted puede usar el nombre de la aplicación. De lo contrario, es necesario especificar el nombre de archivo completo.
image

La tercera sobrecarga toma el nombre del archivo, un valor String que corresponde al nombre del usuario de inicio de sesión de usuario, la contraseña de inicio de sesión System.Security.SecureString del usuario y el nombre de dominio.
image
 
Las clases StackTrace y StackFrame
La clase StackTrace permite ver el estado de la llamada en tiempo de ejecución un cierto punto.
Cada vez que un método es llamado, un stackframe se agrega y se inserta en la pila. Cada método posterior se inserta en la pila que se ejecutará en orden último en entrar, primero en salir.

Así, examinando la StackTrace y su StackFrames se tiene gran cantidad de información sobre el estado de la aplicación. Para ver una breve descripción de la clase StackFrame haga clic aqui.
 
Lección 4 – Detectando Manejadores de eventos
System.Management es un namespace que provee un conjunto de herramientas para monitorear el manejo del sistema, dispositivos y aplicaciones (a través de las herramientas de instrumentación para el manejo de Windows WMI).
 

Enumerando objetos Managenent
El objeto DirectoryObjectSearcher es el central de esta namespace, mediante programación puede acceder a los recursos a través de WMI. Este mecanismo es fácil de usar porque la imita la sintaxis del Lenguaje de consulta estructurado (SQL), que la mayoría de los desarrolladores ya están familiarizados.
Ejemplo de cómo ejecutar una consulta mediante el DirectoryObjectSearcher:
1. declarar una instancia de la clase ConnectionOptions, y establecer el nombre de usuario y contraseña.
2. Declarar una instancia de la clase DirectoryObjectSearcher.
3. Declarar un objeto ManagementScope, y establecer la ruta de acceso y la propiedad ConnectionOptions.
4. Crear un objeto ObjectQuery, y especificar una consulta para ejecutar.
5. Crear un ManagementObjectCollection, y configurarlo para que el valor de retorno sea el de la DirectoryObjectSearcher.
 
Enumeración de unidades lógicas
Para enumerar las unidades lógicas utilizando objetos del System.Management, lo principal que hay que hacer es especificar un objetivo, ej : consultar Win32_LogicalDisk y sus atributos de tamaño y el nombre será devuelto a través de un ManagementObjectCollection.
image

 
Enumerar los adaptadores de red

Utilizando la misma metodología, se puede enumerar todos los adaptadores de red en una máquina determinada, solo cambiando la consulta. (Se debe usar Win32_NetworkConfiguration en vez de la Win32_LogicalDisk).

 
Recuperar información sobre qué servicios están detenidos
Recuperación de información sobre los servicios de Windows es igual de fácil que obtenerla de otros recursos, se debe:
1. Crear un nuevo objeto ManagementObjectSearcher. Escuchar
2. Especificar una consulta.
3. Llamar al método Get de la ManagementObjectSearcher
image
 
Suscribirse a un manejador de eventos usando la clase ManagementEventWatcher
La clase ManagementEventWatcher permite saber la información de suscripción sobre los eventos que ocurren en el contexto de WMI. Pasos a realizar:
  1. Crear un nuevo objeto ManagementEventWatcher.
  2. Asociar un EventQuery objeto de la misma.
  3. Llame al método WaitForNextEvent.
  4. Detener las notificaciones.
image.



....................................................................................................................................................
Bajar esta capítulo en formato PDF                                                                Codigo Ejemplo
....................................................................................................................................................

No hay comentarios:

Publicar un comentario