|
using System;
namespace Catel.Diagnostics
{
/// <summary>
/// Stopwatch is used to measure the general performance of Silverlight functionality. Silverlight
/// does not currently provide a high resolution timer as is available in many operating systems,
/// so the resolution of this timer is limited to milliseconds. This class is best used to measure
/// the relative performance of functions over many iterations.
/// </summary>
/// <remarks>
/// Code originally found at http://www.wiredprairie.us/blog/index.php/archives/723.
/// </remarks>
public sealed class Stopwatch
{
private long _startTick;
private long _elapsed;
private bool _isRunning;
/// <summary>
/// Creates a new instance of the class and starts the watch immediately.
/// </summary>
/// <returns>An instance of Stopwatch, running.</returns>
public static Stopwatch StartNew()
{
Stopwatch sw = new Stopwatch();
sw.Start();
return sw;
}
/// <summary>
/// Initializes a new instance of the <see cref="Stopwatch"/> class.
/// </summary>
public Stopwatch() { }
/// <summary>
/// Completely resets and deactivates the timer.
/// </summary>
public void Reset()
{
_elapsed = 0;
_isRunning = false;
_startTick = 0;
}
/// <summary>
/// Begins the timer.
/// </summary>
public void Start()
{
if (!_isRunning)
{
_startTick = GetCurrentTicks();
_isRunning = true;
}
}
/// <summary>
/// Stops the current timer.
/// </summary>
public void Stop()
{
if (_isRunning)
{
_elapsed += GetCurrentTicks() - _startTick;
_isRunning = false;
}
}
/// <summary>
/// Gets a value indicating whether the instance is currently recording.
/// </summary>
public bool IsRunning
{
get { return _isRunning; }
}
/// <summary>
/// Gets the Elapsed time as a Timespan.
/// </summary>
public TimeSpan Elapsed
{
get { return TimeSpan.FromMilliseconds(ElapsedMilliseconds); }
}
/// <summary>
/// Gets the Elapsed time as the total number of milliseconds.
/// </summary>
public long ElapsedMilliseconds
{
get { return GetCurrentElapsedTicks() / TimeSpan.TicksPerMillisecond; }
}
/// <summary>
/// Gets the Elapsed time as the total number of ticks (which is faked
/// as Silverlight doesn't have a way to get at the actual "Ticks")
/// </summary>
public long ElapsedTicks
{
get { return GetCurrentElapsedTicks(); }
}
private long GetCurrentElapsedTicks()
{
return (long)(this._elapsed + (IsRunning ? (GetCurrentTicks() - _startTick) : 0));
}
private long GetCurrentTicks()
{
// TickCount: Gets the number of milliseconds elapsed since the system started.
return Environment.TickCount * TimeSpan.TicksPerMillisecond;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.