Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Diagnostics / PerformanceData / CounterSetInstance.cs / 1407647 / CounterSetInstance.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Diagnostics.PerformanceData { using System; using System.Threading; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; ////// CounterSetInstance class maps to "Instace" in native performance counter implementation. /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CounterSetInstance : IDisposable { internal CounterSet m_counterSet; internal String m_instName; private Int32 m_active; private CounterSetInstanceCounterDataSet m_counters; unsafe internal UnsafeNativeMethods.PerfCounterSetInstanceStruct * m_nativeInst; //// [System.Security.SecurityCritical] [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] 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; } //// // // // // // // [System.Security.SecurityCritical] public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } //// // [System.Security.SecurityCritical] ~CounterSetInstance() { Dispose(false); } //// // [System.Security.SecurityCritical] 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; } } } } } } ///// // // /// Access CounterSetInstanceCounterDataSet property. Developers can then use defined indexer to access /// specific CounterData object to query/update raw counter data. /// public CounterSetInstanceCounterDataSet Counters { get { return m_counters; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Diagnostics.PerformanceData { using System; using System.Threading; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; ////// CounterSetInstance class maps to "Instace" in native performance counter implementation. /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CounterSetInstance : IDisposable { internal CounterSet m_counterSet; internal String m_instName; private Int32 m_active; private CounterSetInstanceCounterDataSet m_counters; unsafe internal UnsafeNativeMethods.PerfCounterSetInstanceStruct * m_nativeInst; //// [System.Security.SecurityCritical] [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] 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; } //// // // // // // // [System.Security.SecurityCritical] public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } //// // [System.Security.SecurityCritical] ~CounterSetInstance() { Dispose(false); } //// // [System.Security.SecurityCritical] 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; } } } } } } ///// // // /// Access CounterSetInstanceCounterDataSet property. Developers can then use defined indexer to access /// specific CounterData object to query/update raw counter data. /// public CounterSetInstanceCounterDataSet Counters { get { return m_counters; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ArrayHelper.cs
- InternalControlCollection.cs
- ZipIOModeEnforcingStream.cs
- MenuItemBindingCollection.cs
- DesignerHost.cs
- ClientConvert.cs
- SelectionHighlightInfo.cs
- SqlServices.cs
- MouseEventArgs.cs
- TextBoxBase.cs
- NameSpaceExtractor.cs
- CollectionBase.cs
- FormViewDeletedEventArgs.cs
- Listen.cs
- SettingsPropertyNotFoundException.cs
- XmlSchemaExporter.cs
- TypeKeyValue.cs
- Speller.cs
- CardSpaceSelector.cs
- ThicknessAnimationBase.cs
- TransformerInfoCollection.cs
- MarkupCompilePass1.cs
- TypeGeneratedEventArgs.cs
- DBAsyncResult.cs
- WebBrowserNavigatedEventHandler.cs
- HierarchicalDataBoundControlAdapter.cs
- SecurityPermission.cs
- LayoutInformation.cs
- VirtualizedCellInfoCollection.cs
- SafeUserTokenHandle.cs
- ContentIterators.cs
- IFlowDocumentViewer.cs
- EncodingConverter.cs
- ObjectContext.cs
- ClientSponsor.cs
- SelectManyQueryOperator.cs
- ContainerFilterService.cs
- ClosureBinding.cs
- FileVersion.cs
- CalloutQueueItem.cs
- ReflectionUtil.cs
- SqlNotificationEventArgs.cs
- BindingWorker.cs
- Effect.cs
- ReadOnlyTernaryTree.cs
- ObjectSecurityT.cs
- SqlDataSourceQueryEditor.cs
- BindingManagerDataErrorEventArgs.cs
- AsyncSerializedWorker.cs
- CalendarAutomationPeer.cs
- EntityDataSourceChangingEventArgs.cs
- DynamicMethod.cs
- Vector3dCollection.cs
- PresentationTraceSources.cs
- NgenServicingAttributes.cs
- ReferenceEqualityComparer.cs
- InheritablePropertyChangeInfo.cs
- InvalidOperationException.cs
- SqlConnectionHelper.cs
- ContextMenuStripGroupCollection.cs
- DES.cs
- PolygonHotSpot.cs
- AutomationIdentifier.cs
- WrappedIUnknown.cs
- SatelliteContractVersionAttribute.cs
- BamlResourceContent.cs
- ModelPropertyCollectionImpl.cs
- QEncodedStream.cs
- ProfileSection.cs
- XhtmlTextWriter.cs
- WS2007FederationHttpBinding.cs
- ImageButton.cs
- MatrixCamera.cs
- OperationInvokerTrace.cs
- XmlChoiceIdentifierAttribute.cs
- HierarchicalDataSourceControl.cs
- SingleObjectCollection.cs
- XmlConvert.cs
- ServiceHostingEnvironment.cs
- ImageCodecInfoPrivate.cs
- DefaultEventAttribute.cs
- LinkClickEvent.cs
- xml.cs
- DataGridCellItemAutomationPeer.cs
- EraserBehavior.cs
- ClockGroup.cs
- SystemBrushes.cs
- XmlSchemaAttribute.cs
- Rfc2898DeriveBytes.cs
- ColumnWidthChangingEvent.cs
- Blend.cs
- MsmqUri.cs
- WebServiceErrorEvent.cs
- PropertyDescriptorComparer.cs
- OleDbRowUpdatedEvent.cs
- InvalidOleVariantTypeException.cs
- CodeTypeReference.cs
- InputLanguageCollection.cs
- DataGridViewCellStyleBuilderDialog.cs
- DecoderFallback.cs