2011-10-20 137 views
5

如何在文本框或输出中打印程序运行的时间?运行程序的时间花费

我希望它能够显示在for-loop中,以获得每个for-loop需要多少时间。

+1

看看这篇文章:用秒表计时类C#功能性能(http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/) – R0MANARMY

+0

嗯,你设置计时器,运行程序,停止计时器,然后在文本框中输入时间。简单!更严重的是,请尝试http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx和'.Subtract()' – alf

回答

12

你可以尝试:

DateTime dt = DateTime.Now; 
for (.......) 
{ 
} 
TimeSpan ts = DateTime.Now - dt; 
textbox1.Text = ts.TotalMilliseconds.ToString(); 

或(根据MSDN)如果你需要更好的分辨率

Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 
for (.......) 
{ 
} 
stopWatch.Stop(); 
textbox1.Text = stopWatch.ElapsedMilliseconds.ToString(); 
+3

[MSDN](http://msdn.microsoft.com/en-us/library/system.datetime。 now.aspx)文档特别建议使用DateTime类进行基准测试**。 – R0MANARMY

+0

@ R0MANARMY:是的,你说得对。我编辑了我的帖子,包括两个解决方案谢谢 – Marco

+0

你可以直接使用'stopWatch.ElapsedMilliseconds'并摆脱中间的TimeSpan转换 – sll

10
var watch = System.Diagnostics.Stopwatch.StartNew(); 

for() 
{ 
// .. 
} 

watch.Stop(); 

// Format 00:00:02.0001008 
string elapsed = watch.Elapsed.ToString();  

// Milliseconds like 2000 for 2 seconds 
string elapsedMs = watch.ElapsedMilliseconds.ToString(); 

System.Diagnostics.Debug.WriteLine(elapsed); 
+0

+1,因为您的答案是第一个,它是正确!! – Marco

0

这样的事情:?

DateTime start = DateTime.UtcNow; 

//... processing ... 

DateTime end = DateTime.UtcNow; 

Syste.Diagnostics.Debug.WriteLine((end - start).ToString()); 
+1

[MSDN](http://msdn.microsoft.com/zh-cn/library/system.datetime.now.aspx)文档特别建议**使用DateTime类进行基准测试。 – R0MANARMY

+1

当然,我知道有更好的计时器,这是很好,如果你想看到秒或分钟... :) –

0

你可以存储在应用程序启动时的当前日期时间,然后创建一个定时器每秒都会发生。当它触发时,你会得到当前的DateTime,减去它们以获得TimeSpan并使用它来填充你的文本框。

+0

这不就是数秒吗? – R0MANARMY

+0

您每秒更新一次输入框,而不是测量时间范围。 – TJHeuvel

0

添加这两行 - 在您的For循环之间或您想要测试函数速度的代码之间。

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 

    --your code 

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 
+0

这将不准确,因为您不仅需要测量代码执行的时间,而且还需要多长时间才能将DateTime转换为字符串+运行代码。如果代码在几分钟内运行几毫秒将不重要,但如果运行时间较短,则可能会产生差异。 – R0MANARMY

+0

@Romanarmy,你是对的,如果它是一种时间关键的核项目。而且你知道我们每天开发的大多数项目都是核应用程序。 –

+0

不,但是我们都编写了一个在严格循环中执行的代码,并且效率较低意味着糟糕的用户体验,因为每次用户单击按钮时UI都会锁定一秒。 – R0MANARMY