c# – 使用StopWatch类进行性能测试的Helper类

在这个示例代码中,我使用一个简单的StopWatch来测试完成给定任务/操作所需的时间

StopWatch SW1 = new StopWatch();
SW1.Start();
SomeAction();
SW1.Stop();
sting results = SW1.Elapsed.ToString();
MessageBox.Show(resutls);

我想有一个我将实例化的类用于测试

public Class PerformanceTests
{
   public StopWatch SW1 = new StopWatch();
   public StopWatch SW2 = new StopWatch();
   public string results1 = "", results2 = "";
   ....
   ....
   //some other variables to use 
}

虽然在实例化类并尝试使用SW1时不允许我使用它的方法.我究竟做错了什么 ?

PerformanceTests Ptst = new PerformanceTests();
Ptst.SW1. ... Start() is not accessible

更新

对于其余的答案,请不要复制我的代码,因为我错过了大写的秒表.而不是实例化秒表类,我不小心没注意Visual Studio询问我是否想为我所谓的秒表而不是.NET真正的秒表创建一个类.

所以我的建议,注意Visual Studio intellisense的建议操作
尽管它应该一直都是一样的.只要确保你真正有经验并且熟悉所有课程.

这是一个简单的类,它可以帮助您测量代码块执行的时间:

public class PerformanceTester : IDisposable
{
    private Stopwatch _stopwatch = new Stopwatch();
    private Action<TimeSpan> _callback;

    public PerformanceTester()
    {
        _stopwatch.Start();
    }

    public PerformanceTester(Action<TimeSpan> callback) : this()
    {
        _callback = callback;            
    }

    public static PerformanceTester Start(Action<TimeSpan> callback)
    {
        return new PerformanceTester(callback);
    }

    public void Dispose()
    {
        _stopwatch.Stop();
        if (_callback != null)
            _callback(Result);
    }

    public TimeSpan Result
    {
        get { return _stopwatch.Elapsed; }
    }
}

用法(使用PerformanceTester包装代码块):

using (var tester = new PerformanceTester())
{
    // code to test
    MessageBox.Show(tester.Results.ToString());
}

如果在使用块之前声明测试器变量,那么当您使用块退出时秒表将自动停止,并且结果将可用于您:

PerformanceTester tester;

using (tester = new PerformanceTester())    
    SomeAction();

MessageBox.Show(tester.Results.ToString());

如果将回调操作传递给PerformanceTester,则将在using语句结束时调用此操作,并将经过的时间传递给回调:

using (PerformanceTester.Start(ts => MessageBox.Show(ts.ToString())))
     SomeAction();

您可以声明方法,它将接受TimeSpan并处理结果:

private void ProcessResult(TimeSpan span)
{
   // log, show, etc
   MessageBox.Show(span.ToString());
}

用法变得非常干净:

using (PerformanceTester.Start(ProcessResult))
     SomeAction();
翻译自:https://stackoverflow.com/questions/13681664/helper-class-for-performance-tests-using-stopwatch-class

转载注明原文:c# – 使用StopWatch类进行性能测试的Helper类