public static HiPerfTimer GetInstance()
{
//creer une nouvelle instance s il n en existe pas deja une autre
if (_theUniqueInstance == null)
return _theUniqueInstance = new HiPerfTimer();
else
return _theUniqueInstance;
}
if (QueryPerformanceFrequency(out freq) == false)
{
// high-performance counter not supported
throw new Win32Exception();
}
}
// Start the timer
public static void Start()
{
long astartTime;
// lets do the waiting threads there work
Thread.Sleep(0);
QueryPerformanceCounter(out astartTime);
HiPerfTimer.GetInstance().StartTime = astartTime;
}
// Stop the timer
private static void Stop()
{
long astopTime;
QueryPerformanceCounter(out astopTime);
HiPerfTimer.GetInstance().StopTime = astopTime;
}
// Returns the duration of the timer (in seconds)
public double Duration
{
get
{
HiPerfTimer.Stop();
return (double)(stopTime - startTime) / (double)freq;
}
}
// Affiche dans la console
private void toConsole(double theTime)
{
long aTime;
QueryPerformanceCounter(out aTime);
Console.WriteLine(" Durée : {0} {1} sec", theTime, aTime);
}
// Affiche dans la console
private void toConsole(double theTime, String theMsg)
{
long aTime;
QueryPerformanceCounter(out aTime);
Console.WriteLine(" Durée : {0} {1} sec\t\t\t" + theMsg, theTime, aTime);
}
// Affiche dans la console avec restart du timer
public static void toConsole_Restart()
{
HiPerfTimer.GetInstance().toConsole(HiPerfTimer.GetInstance().Duration);
HiPerfTimer.Start();
}
// Affiche dans la console sans restart du timer
public static void toConsole_Continue()
{
HiPerfTimer.GetInstance().toConsole(HiPerfTimer.GetInstance().Duration);
}
// Affiche le counter
public static void toConsole_Counter(String theMsg)
{
long aTime;
QueryPerformanceCounter(out aTime);
HiPerfTimer.GetInstance().toConsole((double)aTime / (double)HiPerfTimer.GetInstance().Freq, theMsg);
}
}
}
StopWatch est un Wrapper de QueryPerformanceCounter donc difficile de faire mieux...
En gros, la class que tu as fait est +/- la même que celle du Framework, donc pourquoi réinventer la roue !?
Salut, niveau prog j'aurais rajouté l'attribut [System.Security.SuppressUnmanagedCodeSecurity] aux déclarations P/Invoke pour obtenir des résultats plus siginificatifs.
Non rien a voir avec le point d'arrêt.. en quelques sorte ça empêche le runtime de faire certains test de sécurité.. l'important c'est de retenir que pour tes methodes privées tu peux utiliser cet attribut pour améliorer les performances quand c'est vraiment nécessaire.