/// <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(); } }