关于DateTime的问题.现在在c#中

本文关键字:问题 DateTime 关于 | 更新日期: 2023-09-27 18:09:14

DateTime startTime = System.DateTime.Now;
//do the search
Graph_SearchBFS BFS = new Graph_SearchBFS(Graph, sourceCell, targetCell);
DateTime endTime = System.DateTime.Now;

为什么startTime等于endTime?这是什么意思?顺便说一下,我的目标是测量图搜索需要多少时间。

谢谢

关于DateTime的问题.现在在c#中

这意味着系统时钟粒度太大,无法准确测量这类事情——换句话说,调用构造函数发生得非常快。

但是,您可以使用一个更适合精确计时的类——或者至少,它可以利用高精度时钟(如果有的话):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();

或类似的东西。然后你可以在"finding"部分循环多次:

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

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

使用StopWatch类代替;它更精确。

使用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");

可能是该方法非常快。你看过毫秒数或滴答数吗?

http://msdn.microsoft.com/en-us/library/system.datetime.millisecond.aspx

http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx