/// <inheritdoc/>
        public override void Update(GameTime gameTime)
        {
            int currentlyToRemoveCount;

            lock (_toRemove)
            {
                currentlyToRemoveCount = Math.Min(_toRemove.Count, INITIAL_ARRAY_SIZE);
                _toRemove.CopyTo(0, _currentlyToRemove, 0, currentlyToRemoveCount);
                _toRemove.RemoveRange(0, currentlyToRemoveCount);
            }

            // ReSharper disable once InconsistentlySynchronizedField
            for (int i = 0; i < currentlyToRemoveCount; i++)
            {
                // ReSharper disable once InconsistentlySynchronizedField
                Entity entity = _currentlyToRemove[i];
                for (int si = _entitySystemsCount - 1; si >= 0; si--)
                {
                    EntitySystemBase system = _entitySystems[si];
                    if (entity.SystemFlags == 0 || (entity.SystemFlags & system.SystemMask) == system.SystemMask)
                    {
                        system.Remove(entity);
                    }
                }
            }

            int currentlyToChangedCount;

            lock (_toChanged)
            {
                currentlyToChangedCount = Math.Min(_toChanged.Count, INITIAL_ARRAY_SIZE);
                _toChanged.CopyTo(0, _currentlyToChanged, 0, currentlyToChangedCount);
                _toChanged.RemoveRange(0, currentlyToChangedCount);
            }

            // ReSharper disable once InconsistentlySynchronizedField
            for (int i = 0; i < currentlyToChangedCount; i++)
            {
                // ReSharper disable once InconsistentlySynchronizedField
                Entity entity = _currentlyToChanged[i];
                for (int si = _entitySystemsCount - 1; si >= 0; si--)
                {
                    EntitySystemBase system = _entitySystems[si];
                    if (entity.SystemFlags == 0 || (entity.SystemFlags & system.SystemMask) == system.SystemMask)
                    {
                        system.Changed(entity);
                    }
                }
            }

            for (int i = 0; i < _entityUpdateableSystemsCount; i++)
            {
                IUpdateableSystem system = _entityUpdateableSystems[i];
                if (system.Enabled)
                {
                    system.Update(gameTime);
                }
            }
        }