2011-09-20 59 views
0
DateTime startTime = System.DateTime.Now; 

//do the search 
Graph_SearchBFS BFS = new Graph_SearchBFS(Graph, sourceCell, targetCell); 

DateTime endTime = System.DateTime.Now; 

如何startTime等于endTime?那是什么意思?顺便说一句,我的目标是衡量图表搜索需要多少时间。关于C#中DateTime.Now的问题#

感谢

回答

6

这意味着系统时钟粒度过大,以精确地测量这样的事情 - 换句话说,调用构造函数很快发生。

但是,您可以使用更适合精确定时的类 - 或者至少可以利用高精度时钟(如果有):Stopwatch

Stopwatch sw = Stopwatch.StartNew(); 
Graph_SearchBFS BFS = new Graph_SearchBFS(Graph, sourceCell, targetCell); 
sw.Stop(); 

现在你可以看看sw.Elapsed属性,看看它花了多长时间。

当然,完全有可能它会仍然太快而无法测量。通常,对于基准测试,您需要做足够的事情,以便在数秒内完成时间,而不是单次操作。

顺便说一下,您的Graph_SearchBFS构造函数实际上在做什么工作?如果是这样,那也是一种设计气味。通常我希望代码更像这样:

Graph_SearchBFS BFS = new Graph_SearchBFS(Graph); 
Stopwatch sw = Stopwatch.StartNew(); 
BFS.FindCell(sourceCell, targetCell); 
sw.Stop(); 

或类似的东西。然后你就可以循环很多次在“发现”部分:

Graph_SearchBFS BFS = new Graph_SearchBFS(Graph); 
Stopwatch sw = Stopwatch.StartNew(); 
for (int i = 0; i < Iterations; i++) 
{ 
    BFS.FindCell(sourceCell, targetCell); 
} 
sw.Stop(); 
+0

是构造进行搜索,我从一本书上工作。 – pokoko222

+1

@ pokoko222:哦,亲爱的 - 这本书不是非常好的标志:(顺便说一下,也不是类名。) –

1

可能是因为你的方法运行比时钟的分辨率更快。

改为使用StopWatch类;它更精确。

1

使用Stopwatch测量执行速度

Stopwatch sw = new Stopwatch(); 
    sw.Start(); 

    Graph_SearchBFS BFS = new Graph_SearchBFS(Graph, sourceCell, targetCell); 

    sw.Stop(); 
    Debug.WriteLine("Time to query: " + sw.ElapsedMilliseconds + " ms");