C# Programming

Maîtrise des millisecondes : chronométrage précis en C#

Spread the love

Une mesure précise du temps est cruciale pour diverses tâches de programmation, de la journalisation des événements à la mesure des performances. Si les secondes suffisent souvent, de nombreuses applications exigent une précision à la milliseconde pour un chronométrage précis. Cet article explore comment y parvenir en C#.

Table des matières

  1. Notions fondamentales sur la date et l’heure en C#
  2. Travailler avec les millisecondes en C#
  3. Exemples pratiques : obtenir les millisecondes
  4. Choisir la bonne méthode

Notions fondamentales sur la date et l’heure en C#

C# offre une gestion robuste de la date et de l’heure grâce aux structures DateTime et DateTimeOffset. Celles-ci fournissent diverses propriétés et méthodes pour manipuler les informations de date et d’heure. Cependant, l’accès direct aux millisecondes nécessite une compréhension plus approfondie de ces outils.

Travailler avec les millisecondes en C#

Le concept principal réside dans la compréhension de la propriété Ticks. Une structure DateTime représente un point dans le temps, et Ticks renvoie le nombre d’intervalles de 100 nanosecondes depuis minuit, le 1er janvier 0001. Pour obtenir les millisecondes, nous divisons la valeur Ticks par TimeSpan.TicksPerMillisecond (10 000).

Exemples pratiques : obtenir les millisecondes

Méthode 1 : Utilisation de DateTime.Now.Ticks

Il s’agit de l’approche la plus simple pour obtenir l’heure actuelle en millisecondes :


using System;

public class MillisecondsExample
{
    public static void Main(string[] args)
    {
        long ticks = DateTime.Now.Ticks;
        long milliseconds = ticks / TimeSpan.TicksPerMillisecond;
        Console.WriteLine($"Heure actuelle en millisecondes : {milliseconds}");
    }
}

Méthode 2 : Utilisation de Stopwatch pour le temps écoulé

La classe Stopwatch excelle dans la mesure du temps écoulé, offrant une meilleure précision pour les courtes durées par rapport à l’utilisation directe de DateTime.Now. Ceci est idéal pour l’évaluation comparative des performances.


using System;
using System.Diagnostics;

public class StopwatchExample
{
    public static void Main(string[] args)
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Code à chronométrer…
        System.Threading.Thread.Sleep(500); // Simule un travail

        stopwatch.Stop();
        long milliseconds = stopwatch.ElapsedMilliseconds;
        Console.WriteLine($"Temps écoulé en millisecondes : {milliseconds}");
    }
}

Méthode 3 : Minuteur haute résolution (pour les besoins avancés)

Pour une précision extrême, considérez l’API QueryPerformanceCounter. Cependant, n’oubliez pas que cela dépend de la plateforme et que la précision varie en fonction du matériel. Ce n’est généralement pas nécessaire, sauf si vous avez besoin d’une précision à la microseconde ou à la nanoseconde.


using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

public class HighResolutionTimerExample
{
    public static void Main(string[] args)
    {
        long frequency;
        long startTime;
        long endTime;

        QueryPerformanceFrequency(out frequency);
        QueryPerformanceCounter(out startTime);

        // Code à chronométrer…
        System.Threading.Thread.Sleep(500); // Simule un travail

        QueryPerformanceCounter(out endTime);

        long elapsedTicks = endTime - startTime;
        double elapsedMilliseconds = (double)elapsedTicks / frequency * 1000;
        Console.WriteLine($"Temps écoulé en millisecondes : {elapsedMilliseconds}");
    }

    [DllImport("Kernel32.dll")]
    private static extern bool QueryPerformanceFrequency(out long lpFrequency);

    [DllImport("Kernel32.dll")]
    private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
}

Choisir la bonne méthode

Choisissez la méthode la mieux adaptée aux besoins de votre application. Pour la plupart des scénarios, DateTime.Now.Ticks ou Stopwatch offre une précision suffisante. N’utilisez QueryPerformanceCounter que lorsque la précision extrême (microsecondes ou nanosecondes) est absolument nécessaire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *