web-dev-qa-db-fra.com

Différence entre ElapsedTicks, ElapsedMilliseconds, Elapsed.Milliseconds et Elapsed.TotalMilliseconds? (C #)

Je suis totalement confus entre ces 4. Quelle est la différence entre ElapsedMilliseconds (long), ElapsedTicks (long), Elapsed.TotalMilliseconds (double) et Elapsed.Milliseconds (int)?

J'ai une fonction

    {
        Stopwatch sw = new Stopwatch();

        sw.Start();
        MyTimeConsumingAction();
        sw.Stop();

        sw.//what?
    }

Comment puis-je obtenir le temps correct consommé par mon processus de longue durée à partir de la propriété écoulée de l'objet Chronomètre en millisecondes?

Edit: J'ai essayé la documentation msdn mais ce n'est rien de détaillé là-bas ..

38
nawfal

Elapsed.TotalMilliseconds (double) renvoie le nombre total de millisecondes entières et fractionnaires écoulées depuis la création

par exemple. un chronomètre arrêté à 1,23456 seconde renverrait 1234,56 dans cette propriété. Voir TimeSpan.TotalMilliseconds sur MSDN

Elapsed.Milliseconds (int) renvoie le nombre de millisecondes entières dans la seconde en cours

par exemple. un chronomètre à 1.234 secondes renverrait 234 dans cette propriété. Voir TimeSpan.Milliseconds

ElapsedTicks (long) renvoie les ticks depuis le début du chronomètre.

Dans le contexte de la question d'origine, relative à la classe Chronomètre, ElapsedTicks est le nombre de ticks écoulés. Les ticks se produisent au rythme de Stopwatch.Frequency, donc, pour calculer les secondes écoulées, calculez: numSeconds = stopwatch.ElapsedTicks/Stopwatch.Frequency.

L'ancienne réponse définissait les ticks comme le nombre de périodes de 100 nanosecondes, ce qui est correct dans le contexte de la classe DateTime, mais pas correct dans le contexte de la classe Stopwatch. Voir Stopwatch.ElapsedTicks sur MSDN.

ElapsedMilliseconds renvoie un nombre arrondi à la milliseconde entière la plus proche, il peut donc manquer de précision à la propriété Elapsed.TotalMilliseconds.

Elapsed.TotalMilliseconds est un double qui peut renvoyer les temps d'exécution à la milliseconde partielle tandis que ElapsedMilliseconds est Int64. par exemple. un chronomètre à 0,0007 millisecondes retournerait 0, ou 1234,56 millisecondes retournerait 1234 dans cette propriété. Donc, pour plus de précision, utilisez toujours Elapsed.TotalMilliseconds.

Voir Stopwatch.ElapsedMilliseconds sur MSDN pour des éclaircissements.

Meilleures salutations,

51
Dr. ABT

Le fait de refléter la classe Chronomètre révèle que ElapsedMilliseconds est des ticks écoulés convertis (et arrondis) en millisecondes:

public TimeSpan Elapsed
{
  get
  {
    return new TimeSpan(this.GetElapsedDateTimeTicks());
  }
}

public long ElapsedMilliseconds
{
  get
  {
    return this.GetElapsedDateTimeTicks() / 10000L;
  }
}
7
granaker

dans une courte explication de msdn :

ElapsedMilliseconds

Cette propriété représente le temps écoulé arrondi à la valeur en millisecondes la plus proche. Pour des mesures plus précises, utilisez les propriétés Elapsed ou ElapsedTicks.

ElapsedTicks

Cette propriété représente le nombre de ticks écoulés dans le mécanisme de temporisation sous-jacent. Un tick est la plus petite unité de temps que le chronomètre peut mesurer. Utilisez le champ Fréquence pour convertir la valeur ElapsedTicks en un nombre de secondes.

Elapsed

Utilisez la propriété Elapsed pour récupérer la valeur de temps écoulé à l'aide des méthodes et propriétés TimeSpan. Par exemple, vous pouvez formater l'instance TimeSpan retournée dans une représentation textuelle ou la transmettre à une autre classe qui nécessite un paramètre TimeSpan.

4
Gustavo F

Elapsed est TimeSpan. Si vous voulez afficher l'heure, alors juste Elapsed.ToString() devrait le faire

1
Reniuz