public void Update(IIconDescriptor[] icons) { var nonUsed = _iconTextures.Keys.ToList(); foreach (var id in icons) { var iconTexture = default(IconTextureWrapper); if (!_iconTextures.ContainsKey(id)) { iconTexture = new IconTextureWrapper(id); Allocator.ExecuteSynchronized(() => _iconTextures.Add(id, iconTexture)); } else { iconTexture = _iconTextures[id]; } iconTexture.Visible = id.Visible; nonUsed.Remove(id); } if (nonUsed.Count > 0) { Allocator.ExecuteSynchronized(() => { foreach (var id in nonUsed) { if (!_iconTextures.ContainsKey(id)) { continue; } _iconTextures[id].Dispose(); _iconTextures.Remove(id); } }); } }