测试类Timing
1 class Timing 2 { 3 TimeSpan startingTime; 4 TimeSpan duration; 5 TimeSpan endTime; 6 int ThreadId; 7 public Timing() 8 { 9 startingTime = new TimeSpan(0); 10 duration = new TimeSpan(0); 11 ThreadId = Thread.CurrentThread.ManagedThreadId; 12 } 13 public void StopTime() 14 { 15 duration = 16 Process.GetCurrentProcess().Threads[ThreadId].TotalProcessorTime.Subtract(startingTime); 17 } 18 public void startTime() 19 { 20 GC.Collect(); 21 GC.WaitForPendingFinalizers(); 22 startingTime = Process.GetCurrentProcess().Threads[ThreadId].TotalProcessorTime; 23 } 24 public TimeSpan Result() 25 { 26 return duration; 27 28 }
主测试
Timing time = new Timing();
time.startTime();
//某算法A
time.StopTime();
TimeSpan timespan = time.Result();
Console.WriteLine("time is : " + timespan);
请问是不是测试的就不是某算法A得运行时间,因为时间显示为0,调试的话查看duration是一个固定数值,似乎和算法的复杂程度无关
为嘛这么复杂,直接用Stopwatch来测试算法执行时间哇。
同意楼上的。
这样不更好吗?
static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); Test(); sw.Stop(); TimeSpan ts = sw.Elapsed; Console.WriteLine(ts.Milliseconds); Console.ReadKey(); } static void Test() { Thread.Sleep(500); }
还有,是不是你的运行太快了,你用ts.Milliseconds会不会好点?
举个例子吧:
你要做一个测试的间隔时间:public void Do();
那么:
double startts = new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds;//记录起始时间
Do();
double endts = new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds;//记录结束时间
long differ = Convert.ToInt32(endts - startts);//相差毫秒数
以上做了一次的测试:
你可以通过多次求平均值方法算出时间差
注意这里算出的differ是相差的毫秒数,数值比较大,可以定义为long