Пример #1
0
 private void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (m_counters != null)
         {
             m_counters.Dispose();
             m_counters = null;
         }
     }
     unsafe {
         if (m_nativeInst != null)
         {
             if (Interlocked.Exchange(ref m_active, 0) != 0)
             {
                 if (m_nativeInst != null)
                 {
                     lock (m_counterSet) {
                         if (m_counterSet.m_provider != null)
                         {
                             uint Status = UnsafeNativeMethods.PerfDeleteInstance(m_counterSet.m_provider.m_hProvider, m_nativeInst);
                         }
                         m_nativeInst = null;
                     }
                 }
             }
         }
     }
 }
Пример #2
0
        internal CounterSetInstance(CounterSet counterSetDefined, String instanceName)
        {
            if (counterSetDefined == null)
            {
                throw new ArgumentNullException("counterSetDefined");
            }
            if (instanceName == null)
            {
                throw new ArgumentNullException("InstanceName");
            }
            if (instanceName.Length == 0)
            {
                throw new ArgumentException(SR.GetString(SR.Perflib_Argument_EmptyInstanceName), "InstanceName");
            }

            m_counterSet = counterSetDefined;
            m_instName   = instanceName;
            unsafe {
                m_nativeInst = UnsafeNativeMethods.PerfCreateInstance(
                    m_counterSet.m_provider.m_hProvider, ref m_counterSet.m_counterSet, m_instName, 0);
                int Status = (int)((m_nativeInst != null) ? UnsafeNativeMethods.ERROR_SUCCESS : Marshal.GetLastWin32Error());
                if (m_nativeInst != null)
                {
                    m_counters = new CounterSetInstanceCounterDataSet(this);
                }
                else
                {
                    // ERROR_INVALID_PARAMETER,
                    // ERROR_NOT_FOUND (cannot find installed CounterSet),
                    // ERROR_ALREADY_EXISTS,
                    // ERROR_NOT_ENOUGH_MEMORY

                    switch (Status)
                    {
                    case (int)UnsafeNativeMethods.ERROR_ALREADY_EXISTS:
                        throw new ArgumentException(SR.GetString(SR.Perflib_Argument_InstanceAlreadyExists, m_instName, m_counterSet.m_counterSet), "InstanceName");

                    case (int)UnsafeNativeMethods.ERROR_NOT_FOUND:
                        throw new InvalidOperationException(SR.GetString(SR.Perflib_InvalidOperation_CounterSetNotInstalled, m_counterSet.m_counterSet));

                    case (int)UnsafeNativeMethods.ERROR_INVALID_PARAMETER:
                        if (m_counterSet.m_instType == CounterSetInstanceType.Single)
                        {
                            throw new ArgumentException(SR.GetString(SR.Perflib_Argument_InvalidInstance, m_counterSet.m_counterSet), "InstanceName");
                        }
                        else
                        {
                            throw new Win32Exception(Status);
                        }

                    default:
                        throw new Win32Exception(Status);
                    }
                }
            }

            m_active = 1;
        }
        internal CounterSetInstance(CounterSet counterSetDefined, String instanceName) {
            if (counterSetDefined == null) {
                throw new ArgumentNullException("counterSetDefined");
            }
            if (instanceName == null) {
                throw new ArgumentNullException("InstanceName");
            }
            if (instanceName.Length == 0) {
                throw new ArgumentException(SR.GetString(SR.Perflib_Argument_EmptyInstanceName), "InstanceName");
            }

            m_counterSet = counterSetDefined;
            m_instName   = instanceName;
            unsafe {
                m_nativeInst = UnsafeNativeMethods.PerfCreateInstance(
                        m_counterSet.m_provider.m_hProvider, ref m_counterSet.m_counterSet, m_instName, 0);
                int Status = (int) ((m_nativeInst != null) ? UnsafeNativeMethods.ERROR_SUCCESS : Marshal.GetLastWin32Error());
                if (m_nativeInst != null) {
                    m_counters = new CounterSetInstanceCounterDataSet(this);
                }
                else {
                    // ERROR_INVALID_PARAMETER,
                    // ERROR_NOT_FOUND (cannot find installed CounterSet),
                    // ERROR_ALREADY_EXISTS,
                    // ERROR_NOT_ENOUGH_MEMORY

                    switch (Status) {
                        case (int) UnsafeNativeMethods.ERROR_ALREADY_EXISTS:
                            throw new ArgumentException(SR.GetString(SR.Perflib_Argument_InstanceAlreadyExists, m_instName, m_counterSet.m_counterSet), "InstanceName");

                        case (int) UnsafeNativeMethods.ERROR_NOT_FOUND:
                            throw new InvalidOperationException( SR.GetString(SR.Perflib_InvalidOperation_CounterSetNotInstalled, m_counterSet.m_counterSet));

                        case (int) UnsafeNativeMethods.ERROR_INVALID_PARAMETER:
                            if (m_counterSet.m_instType == CounterSetInstanceType.Single) {
                                throw new ArgumentException(SR.GetString(SR.Perflib_Argument_InvalidInstance, m_counterSet.m_counterSet), "InstanceName");
                            }
                            else {
                                throw new Win32Exception(Status);
                            }

                        default:
                            throw new Win32Exception(Status);
                    }
                }
            }

            m_active = 1;
        }
 private void Dispose(bool disposing) {
     if (disposing) {
         if (m_counters != null) {
             m_counters.Dispose();
             m_counters = null;
         }
     }
     unsafe {
         if (m_nativeInst != null) {
             if (Interlocked.Exchange(ref m_active, 0) != 0) {
                 if (m_nativeInst != null) {
                     lock(m_counterSet) {
                         if (m_counterSet.m_provider != null) {
                             uint Status = UnsafeNativeMethods.PerfDeleteInstance(m_counterSet.m_provider.m_hProvider, m_nativeInst);
                         }
                         m_nativeInst = null;
                     }
                 }
             }
         }
     }            
 }