Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Management / AppDomainResourcePerfCounters.cs / 1305376 / AppDomainResourcePerfCounters.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Management { using System; using System.Configuration; using System.Web; using System.Threading; internal class AppDomainResourcePerfCounters { private const uint NUM_SECONDS_TO_POLL = 5; ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// internal static void Init() { if (_fInit) return; lock (_InitLock) { if (_fInit) return; if (AppDomain.MonitoringIsEnabled) { PerfCounters.SetCounter(AppPerfCounter.APP_CPU_USED_BASE, 100); _Timer = new Timer((new AppDomainResourcePerfCounters()).TimerCallback, null, NUM_SECONDS_TO_POLL * 1000, NUM_SECONDS_TO_POLL * 1000); } _fInit = true; } } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// internal static void Stop() { if (_Timer == null) return; // already stopped _StopRequested = true; lock (_InitLock) { if (_Timer != null) { ((IDisposable)_Timer).Dispose(); _Timer = null; } } // Wait for the _inProgressLock lock while (_inProgressLock != 0) { Thread.Sleep(100); } } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Static data private static bool _fInit = false; private static object _InitLock = new object(); private static Timer _Timer = null; private static int _inProgressLock = 0; private static bool _StopRequested = false; // Instance data private int _MemUsageLastReported = 0; private int _CPUUsageLastReported = 0; private TimeSpan _TotalCPUTime; private DateTime _LastCollectTime; ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// private AppDomainResourcePerfCounters() { _TotalCPUTime = AppDomain.CurrentDomain.MonitoringTotalProcessorTime; _LastCollectTime = DateTime.UtcNow; } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// private void TimerCallback(Object state) { if ( _StopRequested || // Stop has been called -- exit immediately !AppDomain.MonitoringIsEnabled || // Monitoring APIs will throw NotSupportedException if not-enabled Interlocked.Exchange(ref _inProgressLock, 1) != 0) // Is some thread currently executing the callback { return; } try { SetPerfCounters(); } catch { // don't bubble up exceptions, since we are on a timer thread } finally { Interlocked.Exchange(ref _inProgressLock, 0); } } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// private void SetPerfCounters() { //////////////////////////////////////////////////////////// // Calculate memory: Limited to 2TB (Int32.MaxValue * 1024 bytes) long memInKB = (AppDomain.CurrentDomain.MonitoringSurvivedMemorySize / 1024); // Mem used in KB _MemUsageLastReported = (int) Math.Min(Int32.MaxValue, Math.Max(0, memInKB)); // Make sure its within 0 and Int32.MaxValue PerfCounters.SetCounter(AppPerfCounter.APP_MEMORY_USED, _MemUsageLastReported); //////////////////////////////////////////////////////////// // Calculate CPU DateTime dtUtcNow = DateTime.UtcNow; TimeSpan newTotalCPUTime = AppDomain.CurrentDomain.MonitoringTotalProcessorTime; double timeElapsed = (dtUtcNow - _LastCollectTime).TotalMilliseconds; // Total time since last collect double cpuTimeUsed = (newTotalCPUTime - _TotalCPUTime).TotalMilliseconds; // Total CPU time used since last collect int cpuPercent = (int) ((cpuTimeUsed * 100) / timeElapsed); // Percent of CPU time used _CPUUsageLastReported = Math.Min(100, Math.Max(0, cpuPercent)); // Make sure it's within 0 and 100 PerfCounters.SetCounter(AppPerfCounter.APP_CPU_USED, _CPUUsageLastReported); // Update variables for next time _TotalCPUTime = newTotalCPUTime; _LastCollectTime = dtUtcNow; } } } // 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
- ViewBase.cs
- UnconditionalPolicy.cs
- ObjectDataSourceMethodEventArgs.cs
- TextWriterTraceListener.cs
- httpapplicationstate.cs
- FontNamesConverter.cs
- PriorityBindingExpression.cs
- Ops.cs
- Char.cs
- ServiceModelStringsVersion1.cs
- BitmapEffectOutputConnector.cs
- SymmetricSecurityBindingElement.cs
- AmbiguousMatchException.cs
- MethodCallTranslator.cs
- AstTree.cs
- _UncName.cs
- ScalarType.cs
- XmlMembersMapping.cs
- ProjectionNode.cs
- CreateUserErrorEventArgs.cs
- PrinterSettings.cs
- RoutedEvent.cs
- InputMethodStateChangeEventArgs.cs
- FusionWrap.cs
- XmlArrayItemAttributes.cs
- TableParaClient.cs
- SoundPlayer.cs
- TracingConnectionInitiator.cs
- WebBaseEventKeyComparer.cs
- SystemIPv6InterfaceProperties.cs
- InputGestureCollection.cs
- XmlStringTable.cs
- GroupDescription.cs
- MonitoringDescriptionAttribute.cs
- RankException.cs
- DataGridViewTopLeftHeaderCell.cs
- Transform3D.cs
- XPathDocumentIterator.cs
- oledbmetadatacolumnnames.cs
- Workspace.cs
- PrintDialog.cs
- BadImageFormatException.cs
- RangeEnumerable.cs
- InputScopeNameConverter.cs
- RootBrowserWindowProxy.cs
- AtlasWeb.Designer.cs
- FeatureManager.cs
- PageHandlerFactory.cs
- WebBrowserBase.cs
- TimeManager.cs
- BufferedGraphics.cs
- EastAsianLunisolarCalendar.cs
- RecognizedPhrase.cs
- StringSource.cs
- TdsParserSafeHandles.cs
- ButtonBaseAutomationPeer.cs
- LineServices.cs
- SmiEventSink_DeferedProcessing.cs
- CommandPlan.cs
- DesignerCatalogPartChrome.cs
- SyncMethodInvoker.cs
- BitmapEffectState.cs
- PackageFilter.cs
- SmtpTransport.cs
- MetabaseServerConfig.cs
- MetroSerializationManager.cs
- BindingMAnagerBase.cs
- NativeMethods.cs
- ClaimTypes.cs
- ProtocolViolationException.cs
- EntitySqlException.cs
- HatchBrush.cs
- Vector3DConverter.cs
- ProjectionPlan.cs
- SerialReceived.cs
- ExternalException.cs
- ProjectionPlan.cs
- Item.cs
- SQLBoolean.cs
- _DigestClient.cs
- EventMappingSettings.cs
- KeyedPriorityQueue.cs
- BinaryKeyIdentifierClause.cs
- DynamicExpression.cs
- DbParameterCollection.cs
- SubtreeProcessor.cs
- FamilyMapCollection.cs
- IItemContainerGenerator.cs
- TypeForwardedToAttribute.cs
- TreeNodeStyle.cs
- TextEditor.cs
- DbTransaction.cs
- ImageList.cs
- CodeBlockBuilder.cs
- DatatypeImplementation.cs
- CommandDevice.cs
- GenericEnumConverter.cs
- XhtmlBasicTextBoxAdapter.cs
- StandardTransformFactory.cs
- Manipulation.cs