public void Update(TimeSpan frameTime) { List <object> toRemove = new List <object>(); foreach (KeyValuePair <ValueAccess, Dictionary <object, ValueChangeRequest> > buffer in FieldChangeBuffer.BufferedChanges) { ValueAccess access = buffer.Key; foreach (KeyValuePair <object, ValueChangeRequest> instanceBuffer in buffer.Value) { object instance = instanceBuffer.Key; if (CheckShouldRemove(access, instance, instanceBuffer.Value)) { toRemove.Add(instanceBuffer.Key); } else if (!instanceBuffer.Value.RequestProcessed) { access.GetHandler(instance)?.Invoke(instanceBuffer.Value.RequestedValue); instanceBuffer.Value.RequestProcessed = true; } } toRemove.ForEach(o => buffer.Value.Remove(o)); toRemove.Clear(); } m_RailClient.Update(); }