c# timer - Comment convertir les valeurs de chronomètre en nanosecondes, millisecondes et secondes?




stopwatch vb (7)

C'est une question très fondamentale ... assez embarrassante, mais voici:

J'ai un bloc Chronomètre en code C #. Je détermine le temps écoulé en ticks et je veux ensuite convertir en ns, ms, s. Je sais que la fréquence est fournie par la classe Chronomètre et qu'elle est requise pour la conversion.

Merci


Answers

Utilisez cette classe:

public static class Utility
{
    public static long ElapsedNanoSeconds(this Stopwatch watch)
    {
         return watch.ElapsedTicks * 1000000000 / Stopwatch.Frequency;
    }
    public static long ElapsedMicroSeconds(this Stopwatch watch)
    {
        return watch.ElapsedTicks * 1000000 / Stopwatch.Frequency;
    }
}

Ensuite, vous pouvez obtenir les nanosecondes / microsecondes écoulées comme ceci:

var stopwatch = Stopwatch.StartNew();
//... measured code part
Console.WriteLine(stopwatch.ElapsedNanoSeconds());
// OR
Console.WriteLine(stopwatch.ElapsedMicroSeconds());

Pendant des millisecondes, vous pouvez utiliser la méthode ElapsedMilliseconds () de Chronomètre.


Stopwatch.Elapsed est un TimeSpan , vous pouvez donc faire myStopwatch.Elapsed.TotalMilliseconds , myStopwatch.Elapsed.TotalSeconds , etc.

// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();

// Begin timing
stopwatch.Start();

// Do something
for (int i = 0; i < 1000; i++)
{
    Thread.Sleep(1);
}

// Stop timing
stopwatch.Stop();

// Write result
Console.WriteLine("Time elapsed (s): {0}", stopwatch.Elapsed.TotalSeconds);
Console.WriteLine("Time elapsed (ms): {0}", stopwatch.Elapsed.TotalMilliseconds);
Console.WriteLine("Time elapsed (ns): {0}", stopwatch.Elapsed.TotalMilliseconds * 1000000);

Sortie:

Time elapsed (s): 2.4976622
Time elapsed (ms): 2497.6622
Time elapsed (ns): 2497662200

Notez que stopwatch.ElapsedMilliseconds renvoie un long et n'est donc précis que jusqu'à la milliseconde, alors que stopwatch.Elapsed.TotalMilliseconds renvoie un double et a la même précision que stopwatch.ElapsedTicks , sauf qu'il est plus facile à utiliser. ILSpy montre que TimeSpan.TotalMilliseconds est calculé à l'aide de ticks.


Utilisez la propriété Elapsed :

stopwatch.Elapsed.TotalMilliseconds

Si vous obtenez le temps écoulé depuis le chronomètre, il y a des propriétés de l'objet à intervalle de temps à obtenir en second lieu, mill ou autre.

TimeSpan ts = stopWatch.Elapsed;
int seconds = ts.FromSeconds;
int mill = ts.FromMiliseconds;

Selon MSDN , Fréquence vous indique le nombre de ticks par seconde. Donc:

Stopwatch sw = new Stopwatch();
// ...
double ticks = sw.ElapsedTicks;
double seconds = ticks / Stopwatch.Frequency;
double milliseconds = (ticks / Stopwatch.Frequency) * 1000;
double nanoseconds = (ticks / Stopwatch.Frequency) * 1000000000;

À partir des documents MSDN :

Utilisez les champs MSDN et IsHighResolution pour déterminer la précision et la résolution de l'implémentation du chronomètre.

long frequency = Stopwatch.Frequency;
Console.WriteLine("  Timer frequency in ticks per second = {0}",
    frequency);
long nanosecPerTick = (1000L*1000L*1000L) / frequency;
Console.WriteLine("  Timer is accurate within {0} nanoseconds", 
    nanosecPerTick);

C'est bien sûr seulement une question de préférence personnelle, mais j'écrirais cette fonction en utilisant le rendement de rendement:

public IEnumerable<Friend> FindFriends()
{
    //Many thanks to Rex-M for his help with this one.
    //http://.com/users/67/rex-m
    if (userExists)
    {
        foreach(var user in doc.Descendants("user"))
        {
            yield return new Friend
                {
                    ID = user.Element("id").Value,
                    Name = user.Element("name").Value,
                    URL = user.Element("url").Value,
                    Photo = user.Element("photo").Value
                }
        }
    }
}



c#  

c#