首页 新闻 会员 周边 捐助

C#时间测试,时间显示一直为0,请前辈们指导

0
悬赏园豆:30 [待解决问题]

测试类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是一个固定数值,似乎和算法的复杂程度无关

petrickphoenix的主页 petrickphoenix | 初学一级 | 园豆:172
提问于:2015-10-31 10:29
< >
分享
所有回答(4)
0

为嘛这么复杂,直接用Stopwatch来测试算法执行时间哇。

幻天芒 | 园豆:37205 (高人七级) | 2015-10-31 10:37
0

同意楼上的。

Firen | 园豆:5385 (大侠五级) | 2015-10-31 16:10
0

这样不更好吗?

       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会不会好点?

乌龙哈里 | 园豆:209 (菜鸟二级) | 2015-10-31 20:54
0

举个例子吧:

你要做一个测试的间隔时间: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

Lasthelloworld | 园豆:92 (初学一级) | 2016-01-07 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册