在这个示例代码中,我使用一个简单的StopWatch来测试完成给定任务/操作所需的时间
StopWatch SW1 = new StopWatch();
SW1.Start();
SomeAction();
SW1.Stop();
sting results = SW1.Elapsed.ToString();
MessageBox.Show(resutls);
Run Code Online (Sandbox Code Playgroud)
我想有一个我将实例化的类用于测试
public Class PerformanceTests
{
public StopWatch SW1 = new StopWatch();
public StopWatch SW2 = new StopWatch();
public string results1 = "", results2 = "";
....
....
//some other variables to use
}
Run Code Online (Sandbox Code Playgroud)
虽然在实例化类并尝试使用时SW1并没有让我使用它的方法.我究竟做错了什么 ?
PerformanceTests Ptst = new PerformanceTests();
Ptst.SW1. ... Start() is not accessible
Run Code Online (Sandbox Code Playgroud)
更新
对于其余的答案,请不要复制我的代码,因为我错过了大写stopwatch.而不是实例化秒表课我不小心没注意Visual Studio问我是否想为我所谓的秒表而不是.NET的真实创建一个类Stopwatch.
所以我的建议,注意Visual Studio intellisense的建议操作,即使它应该一直是相同的.只要确保你真正有经验并且熟悉所有课程.
Ser*_*kiy 22
这是一个简单的类,它可以帮助您测量代码块执行的时间:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
用法(只使用包装代码块PerformanceTester):
using (var tester = new PerformanceTester())
{
// code to test
MessageBox.Show(tester.Results.ToString());
}
Run Code Online (Sandbox Code Playgroud)
如果在using阻止之前声明测试器变量,那么当您退出using阻止时秒表将自动停止,并且结果将可用于您:
PerformanceTester tester;
using (tester = new PerformanceTester())
SomeAction();
MessageBox.Show(tester.Results.ToString());
Run Code Online (Sandbox Code Playgroud)
如果将回调操作传递给PerformanceTester,则将在using语句结束时调用此操作,并将经过的时间传递给回调:
using (PerformanceTester.Start(ts => MessageBox.Show(ts.ToString())))
SomeAction();
Run Code Online (Sandbox Code Playgroud)
您可以声明方法,它将接受TimeSpan并处理结果:
private void ProcessResult(TimeSpan span)
{
// log, show, etc
MessageBox.Show(span.ToString());
}
Run Code Online (Sandbox Code Playgroud)
用法变得非常干净:
using (PerformanceTester.Start(ProcessResult))
SomeAction();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4898 次 |
| 最近记录: |