Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Services / Monitoring / system / Diagnosticts / Stopwatch.cs / 1 / Stopwatch.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: Stopwatch
**
** Purpose: Implementation for Stopwatch class.
**
** Date: Nov 27, 2002
**
===========================================================*/
namespace System.Diagnostics
{
using Microsoft.Win32;
using System;
// This class uses high-resolution performance counter if installed hardware
// does not support it. Otherwise, the class will fall back to DateTime class
// and uses ticks as a measurement.
public class Stopwatch {
private const long TicksPerMillisecond = 10000;
private const long TicksPerSecond = TicksPerMillisecond * 1000;
private long elapsed;
private long startTimeStamp;
private bool isRunning;
// "Frequency" stores the frequency of the high-resolution performance counter,
// if one exists. Otherwise it will store TicksPerSecond.
// The frequency cannot change while the system is running,
// so we only need to initialize it once.
public static readonly long Frequency;
public static readonly bool IsHighResolution;
// performance-counter frequency, in counts per ticks.
// This can speed up conversion from high frequency performance-counter
// to ticks.
private static readonly double tickFrequency;
static Stopwatch() {
bool succeeded = SafeNativeMethods.QueryPerformanceFrequency(out Frequency);
if(!succeeded) {
IsHighResolution = false;
Frequency = TicksPerSecond;
tickFrequency = 1;
}
else {
IsHighResolution = true;
tickFrequency = TicksPerSecond;
tickFrequency /= Frequency;
}
}
public Stopwatch() {
Reset();
}
public void Start() {
// Calling start on a running Stopwatch is a no-op.
if(!isRunning) {
startTimeStamp = GetTimestamp();
isRunning = true;
}
}
public static Stopwatch StartNew() {
Stopwatch s = new Stopwatch();
s.Start();
return s;
}
public void Stop() {
// Calling stop on a stopped Stopwatch is a no-op.
if( isRunning) {
long endTimeStamp = GetTimestamp();
long elapsedThisPeriod = endTimeStamp - startTimeStamp;
elapsed += elapsedThisPeriod;
isRunning = false;
}
}
public void Reset() {
elapsed = 0;
isRunning = false;
startTimeStamp = 0;
}
public bool IsRunning {
get { return isRunning; }
}
public TimeSpan Elapsed {
get { return new TimeSpan( GetElapsedDateTimeTicks()); }
}
public long ElapsedMilliseconds {
get { return GetElapsedDateTimeTicks()/TicksPerMillisecond; }
}
public long ElapsedTicks {
get { return GetRawElapsedTicks(); }
}
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
// Get the elapsed ticks.
private long GetRawElapsedTicks() {
long timeElapsed = elapsed;
if( isRunning) {
// If the StopWatch is running, add elapsed time since
// the Stopwatch is started last time.
long currentTimeStamp = GetTimestamp();
long elapsedUntilNow = currentTimeStamp - startTimeStamp;
timeElapsed += elapsedUntilNow;
}
return timeElapsed;
}
// Get the elapsed ticks.
private long GetElapsedDateTimeTicks() {
long rawTicks = GetRawElapsedTicks();
if( IsHighResolution) {
// convert high resolution perf counter to DateTime ticks
double dticks = rawTicks;
dticks *= tickFrequency;
return unchecked((long)dticks);
}
else {
return rawTicks;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: Stopwatch
**
** Purpose: Implementation for Stopwatch class.
**
** Date: Nov 27, 2002
**
===========================================================*/
namespace System.Diagnostics
{
using Microsoft.Win32;
using System;
// This class uses high-resolution performance counter if installed hardware
// does not support it. Otherwise, the class will fall back to DateTime class
// and uses ticks as a measurement.
public class Stopwatch {
private const long TicksPerMillisecond = 10000;
private const long TicksPerSecond = TicksPerMillisecond * 1000;
private long elapsed;
private long startTimeStamp;
private bool isRunning;
// "Frequency" stores the frequency of the high-resolution performance counter,
// if one exists. Otherwise it will store TicksPerSecond.
// The frequency cannot change while the system is running,
// so we only need to initialize it once.
public static readonly long Frequency;
public static readonly bool IsHighResolution;
// performance-counter frequency, in counts per ticks.
// This can speed up conversion from high frequency performance-counter
// to ticks.
private static readonly double tickFrequency;
static Stopwatch() {
bool succeeded = SafeNativeMethods.QueryPerformanceFrequency(out Frequency);
if(!succeeded) {
IsHighResolution = false;
Frequency = TicksPerSecond;
tickFrequency = 1;
}
else {
IsHighResolution = true;
tickFrequency = TicksPerSecond;
tickFrequency /= Frequency;
}
}
public Stopwatch() {
Reset();
}
public void Start() {
// Calling start on a running Stopwatch is a no-op.
if(!isRunning) {
startTimeStamp = GetTimestamp();
isRunning = true;
}
}
public static Stopwatch StartNew() {
Stopwatch s = new Stopwatch();
s.Start();
return s;
}
public void Stop() {
// Calling stop on a stopped Stopwatch is a no-op.
if( isRunning) {
long endTimeStamp = GetTimestamp();
long elapsedThisPeriod = endTimeStamp - startTimeStamp;
elapsed += elapsedThisPeriod;
isRunning = false;
}
}
public void Reset() {
elapsed = 0;
isRunning = false;
startTimeStamp = 0;
}
public bool IsRunning {
get { return isRunning; }
}
public TimeSpan Elapsed {
get { return new TimeSpan( GetElapsedDateTimeTicks()); }
}
public long ElapsedMilliseconds {
get { return GetElapsedDateTimeTicks()/TicksPerMillisecond; }
}
public long ElapsedTicks {
get { return GetRawElapsedTicks(); }
}
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
// Get the elapsed ticks.
private long GetRawElapsedTicks() {
long timeElapsed = elapsed;
if( isRunning) {
// If the StopWatch is running, add elapsed time since
// the Stopwatch is started last time.
long currentTimeStamp = GetTimestamp();
long elapsedUntilNow = currentTimeStamp - startTimeStamp;
timeElapsed += elapsedUntilNow;
}
return timeElapsed;
}
// Get the elapsed ticks.
private long GetElapsedDateTimeTicks() {
long rawTicks = GetRawElapsedTicks();
if( IsHighResolution) {
// convert high resolution perf counter to DateTime ticks
double dticks = rawTicks;
dticks *= tickFrequency;
return unchecked((long)dticks);
}
else {
return rawTicks;
}
}
}
}
// 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
- SendKeys.cs
- TextParagraph.cs
- FormViewDeletedEventArgs.cs
- __ConsoleStream.cs
- KeySpline.cs
- SelectionRangeConverter.cs
- ScrollBarRenderer.cs
- FormsAuthenticationEventArgs.cs
- TryLoadRunnableWorkflowCommand.cs
- KerberosTicketHashIdentifierClause.cs
- EntityTypeEmitter.cs
- sitestring.cs
- HMACSHA256.cs
- OutputScopeManager.cs
- WindowCollection.cs
- Processor.cs
- ReferenceSchema.cs
- ChannelServices.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- StringDictionary.cs
- FileDialog_Vista_Interop.cs
- SqlUserDefinedAggregateAttribute.cs
- ExportOptions.cs
- MatrixTransform.cs
- Touch.cs
- SelectionPattern.cs
- UriSection.cs
- UIAgentAsyncParams.cs
- NativeObjectSecurity.cs
- InvokeWebService.cs
- Instrumentation.cs
- FormatVersion.cs
- BindingObserver.cs
- ReliableChannelBinder.cs
- HTTPNotFoundHandler.cs
- ListViewItemMouseHoverEvent.cs
- HorizontalAlignConverter.cs
- RegexWriter.cs
- Int32AnimationUsingKeyFrames.cs
- Int64AnimationBase.cs
- HorizontalAlignConverter.cs
- TextWriterTraceListener.cs
- ExpressionLink.cs
- ObjectDataSourceStatusEventArgs.cs
- QueryableFilterRepeater.cs
- CodeParameterDeclarationExpressionCollection.cs
- ToolTipAutomationPeer.cs
- HScrollProperties.cs
- IndexedGlyphRun.cs
- SqlBuilder.cs
- Vector3DValueSerializer.cs
- ParameterToken.cs
- DataTrigger.cs
- EntityClassGenerator.cs
- SchemaSetCompiler.cs
- RegexTypeEditor.cs
- GlyphRun.cs
- RemoteWebConfigurationHostServer.cs
- UpdateTracker.cs
- FtpCachePolicyElement.cs
- BindingSource.cs
- EventSourceCreationData.cs
- RtfToXamlLexer.cs
- XmlSchemaAttribute.cs
- VisualBrush.cs
- FilteredAttributeCollection.cs
- AssemblyCollection.cs
- MenuItemBinding.cs
- WebPartDescription.cs
- OdbcDataAdapter.cs
- HttpRequest.cs
- PersonalizationProviderHelper.cs
- DeviceSpecificDialogCachedState.cs
- WindowsEditBox.cs
- PrintController.cs
- SecurityKeyUsage.cs
- CngProperty.cs
- ColorKeyFrameCollection.cs
- XmlUnspecifiedAttribute.cs
- ScrollViewerAutomationPeer.cs
- shaper.cs
- HttpPostProtocolReflector.cs
- TextServicesCompartmentContext.cs
- ObservableDictionary.cs
- IDispatchConstantAttribute.cs
- AddingNewEventArgs.cs
- QuestionEventArgs.cs
- WebScriptEnablingElement.cs
- WebUtil.cs
- OleTxTransactionInfo.cs
- ChannelSinkStacks.cs
- Hyperlink.cs
- Parallel.cs
- BufferedStream.cs
- ScrollEvent.cs
- SchemaNotation.cs
- StylusButton.cs
- GlyphElement.cs
- SizeChangedEventArgs.cs
- MapPathBasedVirtualPathProvider.cs