void Update() { while (isRunning) { #region start sw.Start(); var time = DeltaTime; updates++; #endregion #region EiComponent Update try { EiLLNode <EiUpdateInterface> component; var iterator = components.GetIterator(); while (iterator.Next(out component)) { try { if (component.Value == null) { components.Remove(component); } else { component.Value.ThreadedUpdateComponent(time); } } catch (Exception e) { if (component != null) { components.Remove(component); } LogException(() => e); } } } catch (Exception e) { LogException(() => e); } #endregion #region FPS Counter if (DateTime.UtcNow.Ticks > lastFpsUpdate + TimeSpan.TicksPerSecond) { lastFpsUpdate = DateTime.UtcNow.Ticks; framesPerSecond = updates; updates = 0; } #endregion #region End and sleep Thread.Sleep(new TimeSpan(Math.Max(1000, targetFpsInTicks - ticks))); ticks = sw.ElapsedTicks; if (components.Count() > 10) { if (node.Next.Value.ticks < ticks - 5000) { components.LastNode().MoveTo(node.Next.Value.components); } } sw.Reset(); #endregion } }