C# Source Code: High Performance Timer
[
Home
|
Contents
|
Search
|
Reply
| Previous | Next ]
C# Source Code
High Performance Timer
By:
Andrew Baker
Email (spam proof):
Email the originator of this post
Date:
Tuesday, June 29, 2010
Hits:
2305
Category:
General/Framework
Article:
Below is a sample class containing a high performance timer: Example usuage: PerformanceTimer pf = new PerformanceTimer(true); float timeMs = pf.GetTimeMs(); using System; using System.Runtime.InteropServices; ///
/// This class can be used to gather accurate performance timings. ///
public class PerformanceTimer { [DllImport("kernel32.dll")] internal static extern bool QueryPerformanceCounter(ref long lpPerformanceCount); [DllImport("kernel32.dll")] internal static extern bool QueryPerformanceFrequency(ref long lpFrequency); #region Private Variables private bool _isRunning = false; private long _startTime = 0; private long _frequency = 0; private float _elapsed = 0; #endregion Private Variables #region Constructors ///
/// Default constructor - does not start timer immediately. ///
public PerformanceTimer() { } ///
/// Constructor with option to start timer at same time. ///
///
Whether to start timer immediately. public PerformanceTimer(bool startTimer) { if ( startTimer ) { Start(); } } #endregion Constructors #region Public Properties ///
/// Returns True if the timer is currently running. ///
///
To change the running state use the Start and Stop methods provided.
public bool IsRunning { get{return _isRunning;} } #endregion Public Properties #region Public Methods ///
/// Starts the performance timer running. ///
public void Start() { QueryPerformanceFrequency(ref _frequency); QueryPerformanceCounter(ref _startTime); _elapsed = 0; _isRunning = true; } ///
/// Stops the performance timer running. ///
public void Stop() { // Call procedure that will set internal elapsed variable, then turn running flag off. GetTime(); _isRunning = false; } ///
/// Returns the time elapsed since "Start" was called (in seconds). If the timer /// is not running the time elapsed between the last start and stop time is returned. ///
///
A float representing the time ellapsed (in seconds)
public float GetTime() { if (_isRunning) { long endTime = 0; QueryPerformanceCounter(ref endTime); _elapsed = (float)(endTime - _startTime) / _frequency; return _elapsed; } else { return _elapsed; } } ///
/// Returns the time elapsed since "Start" was called (in milliseconds). If the timer /// is not running the time elapsed between the last start and stop time is returned. ///
///
A float representing the time ellapsed (in milliseconds)
public float GetTimeMs() { if (_isRunning) { return GetTime()*1000; } else { return _elapsed*1000; } } ///
/// Override ToString to display time nicely formatted. ///
///
Returns the time formatted as a string.
public override string ToString() { return String.Format("{0:0000.000}s ", GetTime()); } #endregion Public Methods }
Terms and Conditions
Support this site
Download a trial version of the best FTP application on the internet