/// <summary>
        /// Удалить инстанс
        /// </summary>
        /// <param name="instanceName">Имя инстанса</param>
        /// <returns>Существал ли</returns>
        public override bool RemoveInstance(string instanceName)
        {
            WinInstanceInMultiInstanceCategory inst = null;

            if (_instances.TryRemove(instanceName, out inst))
            {
                inst.OnRemoveFromMultiInstanceCategory(true);
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Инициализация категории
        /// </summary>
        protected override void InitCategory()
        {
            CounterCreationDataCollection collection = new CounterCreationDataCollection();

            foreach (var counter in _counters)
            {
                counter.Value.FillCounterCreationData(collection);
            }

            if (HasWinCategory())
            {
                if (Info.InstantiationMode == WinCountersInstantiationMode.AlwaysCreateNew)
                {
                    DeleteWinCategory();
                    _winCategory = CreateWinCategory(collection);
                }
                else if (Info.InstantiationMode == WinCountersInstantiationMode.UseExistedIfPossible)
                {
                    var wc = GetExistedWinCategory();
                    var existedCounters = wc.GetCounters("");
                    if (wc.CategoryType != PerformanceCounterCategoryType.MultiInstance ||
                        !CategoryHelper.IsAllRequestedCountersExist(existedCounters, collection))
                    {
                        DeleteWinCategory();
                        _winCategory = CreateWinCategory(collection);
                    }
                    else
                    {
                        _winCategory = wc;

                        if (Info.ExistedInstancesTreatment == WinCountersExistedInstancesTreatment.LoadExisted)
                        {
                            foreach (var instName in wc.GetInstanceNames())
                            {
                                TryAddInstance(instName);
                            }
                        }
                        else if (Info.ExistedInstancesTreatment == WinCountersExistedInstancesTreatment.RemoveExisted)
                        {
                            foreach (var instName in wc.GetInstanceNames())
                            {
                                if (!HasInstance(instName))
                                {
                                    WinInstanceInMultiInstanceCategory inst = new WinInstanceInMultiInstanceCategory(this, instName);
                                    inst.Init();
                                    inst.OnRemoveFromMultiInstanceCategory(true);
                                }
                            }
                        }
                    }

                    foreach (var cnt in existedCounters)
                    {
                        cnt.Dispose();
                    }
                }
                else
                {
                    throw new InvalidOperationException("Incorrect WinCountersInstantiationMode value: " + Info.InstantiationMode.ToString());
                }
            }
            else
            {
                _winCategory = CreateWinCategory(collection);
            }

            foreach (var inst in _instances)
            {
                inst.Value.Init();
            }
        }