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
- WSIdentityFaultException.cs
- StylusButton.cs
- InProcStateClientManager.cs
- DynamicQueryableWrapper.cs
- CharAnimationUsingKeyFrames.cs
- LinqDataView.cs
- ContextItemManager.cs
- SiteMapDataSourceView.cs
- XmlCollation.cs
- CircleHotSpot.cs
- FormsAuthenticationUser.cs
- DataSourceSelectArguments.cs
- OdbcEnvironmentHandle.cs
- StrokeCollection2.cs
- FormsAuthenticationCredentials.cs
- ReadOnlyTernaryTree.cs
- DataGridViewRowsAddedEventArgs.cs
- XmlQueryType.cs
- BindingMAnagerBase.cs
- TextRangeProviderWrapper.cs
- NoneExcludedImageIndexConverter.cs
- GridPattern.cs
- HandledMouseEvent.cs
- XmlSchemaElement.cs
- ObjectManager.cs
- KeyPressEvent.cs
- FontStyle.cs
- PatternMatcher.cs
- WebContext.cs
- MenuItemBindingCollection.cs
- NotifyInputEventArgs.cs
- XsltConvert.cs
- SecurityTokenTypes.cs
- LongTypeConverter.cs
- Int16Storage.cs
- Application.cs
- GregorianCalendar.cs
- OpacityConverter.cs
- ToolStripDesignerAvailabilityAttribute.cs
- ArgumentNullException.cs
- DbBuffer.cs
- Double.cs
- ProfileGroupSettingsCollection.cs
- CursorInteropHelper.cs
- ExpressionConverter.cs
- ObjectCloneHelper.cs
- BindingSource.cs
- MetafileHeader.cs
- SvcMapFile.cs
- TabletCollection.cs
- ReversePositionQuery.cs
- NamespaceImport.cs
- Compiler.cs
- PermissionRequestEvidence.cs
- HostedTcpTransportManager.cs
- TemplatePropertyEntry.cs
- regiisutil.cs
- XmlIgnoreAttribute.cs
- UriTemplateClientFormatter.cs
- LocatorGroup.cs
- AspNetSynchronizationContext.cs
- Vars.cs
- RequiredAttributeAttribute.cs
- FontUnit.cs
- PersonalizableTypeEntry.cs
- ParseNumbers.cs
- RemoteWebConfigurationHostStream.cs
- DescendantBaseQuery.cs
- EncoderReplacementFallback.cs
- EditableRegion.cs
- SplayTreeNode.cs
- DesignTimeTemplateParser.cs
- SecurityManager.cs
- LogLogRecordEnumerator.cs
- DelegateHelpers.Generated.cs
- DispatcherExceptionFilterEventArgs.cs
- SystemIPInterfaceProperties.cs
- XslCompiledTransform.cs
- AssemblyCacheEntry.cs
- DocumentReference.cs
- XpsFontSerializationService.cs
- TrustManager.cs
- ToolStripPanelCell.cs
- COMException.cs
- Process.cs
- MemoryMappedFileSecurity.cs
- Tuple.cs
- TableLayoutColumnStyleCollection.cs
- HwndMouseInputProvider.cs
- AspProxy.cs
- CachingHintValidation.cs
- DesignerAttribute.cs
- TempFiles.cs
- ConfigurationSettings.cs
- ComponentRenameEvent.cs
- HttpRawResponse.cs
- DbDataReader.cs
- SimplePropertyEntry.cs
- CompositeFontInfo.cs
- TreeNodeCollectionEditor.cs