/// <summary> /// Конструктор для создания пустой подкатегории WinEmptyCategory. /// </summary> /// <param name="name">Название категории</param> /// <param name="description">Описание категории</param> /// <param name="rootName">Корневое имя</param> /// <param name="info">Информация по функционированию</param> internal WinEmptyCategory(string name, string description, string rootName, WinCountersWorkingInfo info) : base(name, description) { if (info == null) { throw new ArgumentNullException("info"); } if (string.IsNullOrEmpty(rootName)) { FullName = name; } else if (string.IsNullOrEmpty(name)) { FullName = rootName; } else { FullName = rootName + "." + name; } _info = info; _state = WinCategoryState.Created; _childCategories = new List <Category>(); }
/// <summary> /// Вызывается из родительской MultiInstanceCategory при удалении данного инстанса /// </summary> /// <param name="removeInstance">Удалять ли данный инстанс в Windows</param> internal void OnRemoveFromMultiInstanceCategory(bool removeInstance) { _state = WinCategoryState.Disposed; foreach (var counter in _counters) { ((IWinCounterInitialization)counter.Value).CounterDispose(removeInstance); } }
/// <summary> /// Освобождение ресурсов /// </summary> /// <param name="isUserCall">Было ли инициировано пользователем</param> protected override void Dispose(bool isUserCall) { if (isUserCall) { _state = WinCategoryState.Disposed; } base.Dispose(isUserCall); }
/// <summary> /// Внутренний метод освобождения ресурсов /// </summary> /// <param name="isUserCall">Вызван ли явно</param> protected override void Dispose(bool isUserCall) { if (_state != WinCategoryState.Disposed) { _state = WinCategoryState.Disposed; foreach (var category in _childCategories) { ((IWinCategoryInitialization)category).DisposeCascade(); } } }
/// <summary> /// Конструктор WinSingleInstanceCategory /// </summary> /// <param name="name">Имя категории</param> /// <param name="description">Описание категории</param> /// <param name="rootName">Корневое имя</param> /// <param name="info">Информация о функционировании</param> internal WinSingleInstanceCategory(string name, string description, string rootName, WinCountersWorkingInfo info) : base(name, description) { if (info == null) { throw new ArgumentNullException("info"); } FullName = string.IsNullOrEmpty(rootName) ? name : rootName + "." + name; _info = info; _state = WinCategoryState.Created; _childCategories = new List <Category>(); }
/// <summary> /// Выполнить инициализацию всех дочерних категорий. /// Без инициализации они не будут работать. /// </summary> public override void InitAll() { if (_state == WinCategoryState.Disposed) { throw new ObjectDisposedException(this.GetType().Name); } _state = WinCategoryState.Initialized; foreach (var category in _childCategories) { ((IWinCategoryInitialization)category).InitCascade(); } }
/// <summary> /// Инициализация счетчиков (создание категорий, инстанцирование самих счетчиков) /// </summary> protected internal override void Init() { if (_state == WinCategoryState.Disposed) { throw new ObjectDisposedException(this.GetType().Name); } if (_state == WinCategoryState.Initialized) { return; } _state = WinCategoryState.Initialized; base.Init(); }
/// <summary> /// Внутренний метод для инициализации /// </summary> internal void Init() { if (_state == WinCategoryState.Disposed) { throw new ObjectDisposedException(this.GetType().Name); } if (_state == WinCategoryState.Initialized) { return; } _state = WinCategoryState.Initialized; foreach (var counter in _counters) { ((IWinCounterInitialization)counter.Value).CounterInit(((WinMultiInstanceCategory)this.Parent).FullName, this.InstanceName); } }
/// <summary> /// Конструктор WinCounterFactory /// </summary> /// <param name="instMode">Режим работы</param> /// <param name="namePrefix">Префикс имени категории</param> /// <param name="machineName">Имя машины (null или '.' для локальной)</param> /// <param name="readOnlyCounters">Счётчики только для чтения</param> /// <param name="preferedBitness">Предпочитать ли 64 битные счётчики</param> /// <param name="existedInstancesTreatment">Как обрабатывать существующие в Windows инстансы</param> public WinCounterFactory(WinCountersInstantiationMode instMode, string namePrefix, string machineName, bool readOnlyCounters, WinCountersPreferedBitness preferedBitness, WinCountersExistedInstancesTreatment existedInstancesTreatment) { bool prefer64BitCounters = Environment.Is64BitOperatingSystem; if (preferedBitness == WinCountersPreferedBitness.Prefer32BitCounters) { prefer64BitCounters = false; } else if (preferedBitness == WinCountersPreferedBitness.Prefer64BitCounters) { prefer64BitCounters = true; } _info = new WinCountersWorkingInfo(instMode, machineName, readOnlyCounters, prefer64BitCounters, existedInstancesTreatment); _namePrefix = namePrefix != null?namePrefix.TrimEnd('.') : ""; _state = WinCategoryState.Created; _childCategories = new List <Category>(); }
/// <summary> /// Конструктор для создания инстанса WinInstanceInMultiInstanceCategory /// </summary> /// <param name="parent">Родительская многоинстовая категория</param> /// <param name="instanceName">Имя инстанса</param> internal WinInstanceInMultiInstanceCategory(WinMultiInstanceCategory parent, string instanceName) : base(parent, instanceName) { _state = WinCategoryState.Created; _counters = parent.Counters.ToDictionary(key => key.Name, val => val.CreateCounter()); }