Monitorare l'esecuzione dei metodi di una classe

martedì 25 novembre 2008 - 13.14

liveforever81 Profilo | Junior Member

Salve.

Volevo testare le performance della mia applicazione (in fatto di tempi d'esecuzione).

Ho una classe di questo tipo:

using System.Diagnostics

namespace Class1
{

public class Class1
{

metodo1
{
}

metodo2
{
}

metodo3
{
}

metodo4
{
}
}
}

Volevo creare un oggetto di tipo Stopwatch che inizia il proprio counter appena questa classe viene chiamata. I metodi (1, 2 e 3) si chiamano tra di loro e voglio fare in modo che l'oggetto (altro non è che un timer) Stopwatch non vegna resettato ma continui finchè non viene eseguito il metodo 4 che è temporalmente l'ultimo.

Come fare (evitando magari di passare questo oggetto come parametro di ogni funzione)?

Grazie mille

aiedail92 Profilo | Expert

Ciao

Quello che vuoi monitorare in pratica è il tempo di esecuzione di metodo1 (che a sua volta richiama gli altri a cascata); io procederei in questo modo: prendo il tempo di esecuzione corrente, avvio il metodo, al suo termine prendo il nuovo tempo di esecuzione e faccio la differenza col primo. Così hai l'intervallo di tempo passato dalla chiamata del metodo al suo termine:

[DllImport("msvcrt.dll")] static extern long clock(); void test() { long millisec = clock(); metodo1(); millisec = clock() - millisec; }

Luca

liveforever81 Profilo | Junior Member

Ciao e grazie per la celere risposta...

2 cose:

1) lavoro in C# :-)
2) devo tassativamente lavorare con un oggetto Stopwatch: il mio obiettivo è dichiarare questa variabile "globale" in modo da poterla girare tra i metodi...come fare?

aiedail92 Profilo | Expert

>Ciao e grazie per la celere risposta...

Di niente

>2 cose:
>
>1) lavoro in C# :-)

...E il codice che ti ho proposto è c# al 100%

>2) devo tassativamente lavorare con un oggetto Stopwatch: il
>mio obiettivo è dichiarare questa variabile "globale" in modo
>da poterla girare tra i metodi...come fare?

Se proprio devi usare uno Stopwatch, puoi dichiararlo direttamente all'interno della classe:

public class Class1 { Stopwatch sw = new Stopwatch(); void metodo1() { sw.Reset(); sw.Start(); //... metodo2(); } void metodo2() { //... metodo3(); } void metodo3() { //... } void metodo4() { //... sw.Stop(); } }

Luca

liveforever81 Profilo | Junior Member

Non funziona.

L'oggetto sw richiamato nel primo metodo non implementa alcun metodo della classe StopWatch (es. Reset() o Start()...)

aiedail92 Profilo | Expert

Lo hai dichiarato e istanziato a livello di classe?

Luca

liveforever81 Profilo | Junior Member

si, uguale uguale a te!

aiedail92 Profilo | Expert

... E dà problemi di compilazione?

Prova a postare il codice completo, ci dò un'occhiata

Luca

liveforever81 Profilo | Junior Member

ho spudoratamente copiato il tuo codice in una nuova applicazione! :D

aiedail92 Profilo | Expert

Ti dà errori di compilazione o a runtime? Riporta esattamente i nomi degli errori e la loro descrizione, così vediamo di focalizzare il problema.

Luca

liveforever81 Profilo | Junior Member

...nulla in particolare: quando nel metodo richiamo l'oggetto sw. attendo che l'intellisense si faccia vivo, ma nulla: come se nn riconoscesse l'oggetto Stopwatch dichiarato a livello di classe!

aiedail92 Profilo | Expert

Forse non hai importato il namespace...

using System.Diagnostics;

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5