Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / PerfCounters.cs / 1 / PerfCounters.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* PerfCounters class
*/
namespace System.Web {
using System.Web.Util;
using System.Threading;
using System.Runtime.InteropServices;
internal sealed class PerfInstanceDataHandle: SafeHandle {
internal PerfInstanceDataHandle() : base(IntPtr.Zero, true) {
}
internal IntPtr UnsafeHandle {
get { return handle; }
}
public override bool IsInvalid {
get { return handle == IntPtr.Zero; }
}
override protected bool ReleaseHandle() {
UnsafeNativeMethods.PerfCloseAppCounters(handle);
handle = IntPtr.Zero;
return true;
}
}
internal sealed class PerfCounters {
private static PerfInstanceDataHandle _instance = null;
private static IntPtr _global = IntPtr.Zero;
private static IntPtr _stateService = IntPtr.Zero;
private PerfCounters () {}
internal static void Open(string appName) {
Debug.Assert(appName != null);
OpenCounter(appName);
}
internal static void OpenStateCounters() {
OpenCounter(null);
}
// The app name should either be a valid app name or be 'null' to get the state service
// counters initialized
private static void OpenCounter(string appName) {
try {
// Don't activate perf counters if webengine.dll isn't loaded
if (! HttpRuntime.IsEngineLoaded)
return;
// Open the global counters
if (_global == IntPtr.Zero) {
_global = UnsafeNativeMethods.PerfOpenGlobalCounters();
}
// If appName is null, then we want the state counters
if (appName == null) {
if (_stateService == IntPtr.Zero) {
_stateService = UnsafeNativeMethods.PerfOpenStateCounters();
}
}
else {
if (appName != null) {
_instance = UnsafeNativeMethods.PerfOpenAppCounters(appName);
}
}
}
catch (Exception e) {
Debug.Trace("Perfcounters", "Exception: " + e.StackTrace);
}
}
// Make sure webengine.dll is loaded before attempting to call into it (ASURT 98531)
internal static void IncrementCounter(AppPerfCounter counter) {
if (_instance != null)
UnsafeNativeMethods.PerfIncrementCounter(_instance.UnsafeHandle, (int) counter);
}
internal static void DecrementCounter(AppPerfCounter counter) {
if (_instance != null)
UnsafeNativeMethods.PerfDecrementCounter(_instance.UnsafeHandle, (int) counter);
}
internal static void IncrementCounterEx(AppPerfCounter counter, int delta) {
if (_instance != null)
UnsafeNativeMethods.PerfIncrementCounterEx(_instance.UnsafeHandle, (int) counter, delta);
}
internal static void SetCounter(AppPerfCounter counter, int value) {
if (_instance != null)
UnsafeNativeMethods.PerfSetCounter(_instance.UnsafeHandle, (int) counter, value);
}
// It's important that this be debug only. We don't want production
// code to access shared memory that another process could corrupt.
#if DBG
internal static int GetCounter(AppPerfCounter counter) {
if (_instance != null)
return UnsafeNativeMethods.PerfGetCounter(_instance.UnsafeHandle, (int) counter);
else
return -1;
}
#endif
internal static int GetGlobalCounter(GlobalPerfCounter counter) {
if (_global != IntPtr.Zero)
return UnsafeNativeMethods.PerfGetCounter(_global, (int) counter);
else
return -1;
}
internal static void IncrementGlobalCounter(GlobalPerfCounter counter) {
if (_global != IntPtr.Zero)
UnsafeNativeMethods.PerfIncrementCounter(_global, (int) counter);
}
internal static void DecrementGlobalCounter(GlobalPerfCounter counter) {
if (_global != IntPtr.Zero)
UnsafeNativeMethods.PerfDecrementCounter(_global, (int) counter);
}
#if UNUSED_CODE
internal static void IncrementGlobalCounterEx(GlobalPerfCounter counter, int delta) {
if (_global != IntPtr.Zero)
UnsafeNativeMethods.PerfIncrementCounterEx(_global, (int) counter, delta);
}
#endif
internal static void SetGlobalCounter(GlobalPerfCounter counter, int value) {
if (_global != IntPtr.Zero)
UnsafeNativeMethods.PerfSetCounter(_global, (int) counter, value);
}
internal static void IncrementStateServiceCounter(StateServicePerfCounter counter) {
if (_stateService == IntPtr.Zero)
return;
UnsafeNativeMethods.PerfIncrementCounter(_stateService, (int) counter);
switch (counter) {
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TOTAL:
IncrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TOTAL);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ACTIVE:
IncrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ACTIVE);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TIMED_OUT:
IncrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TIMED_OUT);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ABANDONED:
IncrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ABANDONED);
break;
default:
break;
}
}
internal static void DecrementStateServiceCounter(StateServicePerfCounter counter) {
if (_stateService == IntPtr.Zero)
return;
UnsafeNativeMethods.PerfDecrementCounter(_stateService, (int) counter);
switch (counter) {
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TOTAL:
DecrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TOTAL);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ACTIVE:
DecrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ACTIVE);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TIMED_OUT:
DecrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TIMED_OUT);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ABANDONED:
DecrementGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ABANDONED);
break;
default:
break;
}
}
#if UNUSED_CODE
internal static void IncrementStateServiceCounterEx(StateServicePerfCounter counter, int delta) {
if (_stateService == IntPtr.Zero)
return;
UnsafeNativeMethods.PerfIncrementCounterEx(_stateService, (int) counter, delta);
switch (counter) {
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TOTAL:
IncrementGlobalCounterEx(GlobalPerfCounter.STATE_SERVER_SESSIONS_TOTAL, delta);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ACTIVE:
IncrementGlobalCounterEx(GlobalPerfCounter.STATE_SERVER_SESSIONS_ACTIVE, delta);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TIMED_OUT:
IncrementGlobalCounterEx(GlobalPerfCounter.STATE_SERVER_SESSIONS_TIMED_OUT, delta);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ABANDONED:
IncrementGlobalCounterEx(GlobalPerfCounter.STATE_SERVER_SESSIONS_ABANDONED, delta);
break;
default:
break;
}
}
#endif
internal static void SetStateServiceCounter(StateServicePerfCounter counter, int value) {
if (_stateService == IntPtr.Zero)
return;
UnsafeNativeMethods.PerfSetCounter(_stateService, (int) counter, value);
switch (counter) {
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TOTAL:
SetGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TOTAL, value);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ACTIVE:
SetGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ACTIVE, value);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_TIMED_OUT:
SetGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_TIMED_OUT, value);
break;
case StateServicePerfCounter.STATE_SERVICE_SESSIONS_ABANDONED:
SetGlobalCounter(GlobalPerfCounter.STATE_SERVER_SESSIONS_ABANDONED, value);
break;
default:
break;
}
}
};
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LookupNode.cs
- Point3DCollectionConverter.cs
- XmlCDATASection.cs
- FileVersion.cs
- XmlDownloadManager.cs
- CompModHelpers.cs
- SystemParameters.cs
- HostingEnvironmentException.cs
- WebHttpDispatchOperationSelectorData.cs
- WrappedIUnknown.cs
- TraceRecord.cs
- StylusPlugin.cs
- ModulesEntry.cs
- ControlUtil.cs
- SafeProcessHandle.cs
- CngKeyCreationParameters.cs
- File.cs
- IDQuery.cs
- QueryOptionExpression.cs
- panel.cs
- _ListenerRequestStream.cs
- ElementUtil.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- FamilyTypeface.cs
- TriggerBase.cs
- SrgsDocumentParser.cs
- MetadataCacheItem.cs
- StorageMappingItemCollection.cs
- OciEnlistContext.cs
- GlyphTypeface.cs
- XomlCompilerResults.cs
- PackageFilter.cs
- ResourcePool.cs
- ListViewDesigner.cs
- StreamGeometryContext.cs
- ComMethodElement.cs
- NativeStructs.cs
- DrawingBrush.cs
- PropertySourceInfo.cs
- WebPartsPersonalizationAuthorization.cs
- BmpBitmapEncoder.cs
- handlecollector.cs
- ControlPaint.cs
- RestHandler.cs
- ExpandableObjectConverter.cs
- DoubleAnimation.cs
- InitializationEventAttribute.cs
- GridViewAutoFormat.cs
- DbgCompiler.cs
- FindResponse.cs
- ObjectParameterCollection.cs
- DataGridViewLayoutData.cs
- TextParaClient.cs
- MenuItemStyleCollection.cs
- CommunicationObjectManager.cs
- log.cs
- TeredoHelper.cs
- CodeValidator.cs
- FederatedMessageSecurityOverHttp.cs
- SimpleMailWebEventProvider.cs
- GZipStream.cs
- XmlQuerySequence.cs
- IssuedSecurityTokenParameters.cs
- ToolStripPanel.cs
- CultureSpecificCharacterBufferRange.cs
- EntityContainer.cs
- safelink.cs
- StringExpressionSet.cs
- XsltLibrary.cs
- InkCanvasSelection.cs
- XmlNamespaceMappingCollection.cs
- ExpressionVisitorHelpers.cs
- WpfPayload.cs
- documentsequencetextpointer.cs
- ExpandedWrapper.cs
- DrawListViewSubItemEventArgs.cs
- EdmType.cs
- DesignerAutoFormat.cs
- ApplicationHost.cs
- DbConnectionOptions.cs
- XmlTextEncoder.cs
- FileLogRecordEnumerator.cs
- IdleTimeoutMonitor.cs
- DataListItemEventArgs.cs
- ResXDataNode.cs
- EventsTab.cs
- WebPartVerb.cs
- FolderBrowserDialogDesigner.cs
- OleDbConnectionInternal.cs
- ClassHandlersStore.cs
- PathFigureCollectionValueSerializer.cs
- ContractTypeNameCollection.cs
- RolePrincipal.cs
- CompilerTypeWithParams.cs
- NavigationProgressEventArgs.cs
- ZipIORawDataFileBlock.cs
- Stroke2.cs
- ContextStack.cs
- ExclusiveHandle.cs
- Mutex.cs