Moin zusammen,
mir ist schon mal aufgefallen, dass ein Thread.Sleep den rechtlichen Code des Threads verlangsamt. Ich habe da jetzt einmal etwas genauer hingeschaut und einen kleinen Test mit folgendem Code gemacht:
Bei mir braucht der Code ca. 64ms. Wenn ich jetzt das
Kann man das verhindern, oder hat jemand dazu weitere Infos? Ich finde dazu jetzt nicht wirklich was passendes.
Mein Problem ist gerade, dass ich eine GameLoop ohne VSync und ohne 100% Kernauslastung auf 60 FPS runter drücken will. Durch genanntes Problem braucht er aber dann für die Schleife an sich deutlich länger und es tauchen höhere Peeks an Unterbrechungen auf.
mir ist schon mal aufgefallen, dass ein Thread.Sleep den rechtlichen Code des Threads verlangsamt. Ich habe da jetzt einmal etwas genauer hingeschaut und einen kleinen Test mit folgendem Code gemacht:
C#-Quellcode
- static void Main(string[] args) {
- Stopwatch watch = new Stopwatch();
- Random r = new Random();
- List<double> timeAverageList = new List<double>(2_000_000);
- while (true) {
- //Thread.Sleep(50);
- double dump = 0.0;
- watch.Restart();
- for (int i = 0; i < 1_000_000; i++) {
- dump += Math.Pow(r.Next(100) * r.Next(100), 3); //Some work
- }
- watch.Stop();
- timeAverageList.Add(watch.Elapsed.TotalMilliseconds);
- Console.WriteLine($"{timeAverageList.Average():0.0} {dump}");
- }
- }
Bei mir braucht der Code ca. 64ms. Wenn ich jetzt das
Thread.Sleep(50);
einkommentiere, dann braucht der Code ca. 78ms, obwohl das Sleep ja außerhalb der Stopwatch liegt. Ich kann mir das nur so erklären, als das der Scheduler den Thread durch das Sleep als weniger wichtig einstuft und ihm deswegen direkt weniger Zeit zuordnet, auch wenn er gerade was zu tun hat? Bzw. wenn der Thread dauerhaft mehr zu tun hat, ihm dann auch schneller wieder weiter machen lässt?Kann man das verhindern, oder hat jemand dazu weitere Infos? Ich finde dazu jetzt nicht wirklich was passendes.
Mein Problem ist gerade, dass ich eine GameLoop ohne VSync und ohne 100% Kernauslastung auf 60 FPS runter drücken will. Durch genanntes Problem braucht er aber dann für die Schleife an sich deutlich länger und es tauchen höhere Peeks an Unterbrechungen auf.