2011-09-20 60 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");