Je possède ce code:Pourquoi ce code s'exécute-t-il plus vite que prévu?
public void replay() {
long previous = DateTime.Now.Ticks;
for (int i = 0; i < 1000; i++) {
Thread.Sleep(300);
long cur = DateTime.Now.Ticks;
Console.WriteLine(cur - previous);
previous = cur;
}
}
qui est invoquée comme un thread séparé comme celui-ci:
MethodInvoker replayer = new MethodInvoker(replay);
replayer.BeginInvoke(null, null);
Cependant, si je regarde la sortie, il agit étrangement. Il sort i
par paires. Par exemple, il attendra une attente complète, puis affichera i
, puis affichera rapidement le i
suivant, puis attendra de nouveau. Pourquoi fait-il cela et comment puis-je le corriger?
Il produit ceci:
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
Si j'augmente le sommeil à plus d'une seconde, cela ne se produit pas.
Premièrement, est-ce en mode release ou debug? Deuxièmement, utilisez une minuterie plutôt que de simplement regarder la sortie de la console - il n'y a aucune garantie que la console affichera les choses immédiatement. –
il est en mode débogage – Malfist
Etes-vous sûr que ce n'est pas la mise en mémoire tampon sur la console? – annakata