2009-10-22 101 views
0

我想知道如何测量应用程序Loading Time当用户启动进程时,应用程序实例,以便我可以显示进度条或什么东西,通知用户什么时候发生应用程序正在加载或完成多少应用程序加载。如何测量应用程序加载时间?

我的意思是如果我想用进度条显示当前进度,所以我认为我能够用数字定义当前进程,因此我可以增加ProgressBar控件的Value属性。

在此先感谢。

真诚。

编辑:

我已经找到一个解决方案是:

可以使用 System.Diagnostics.Stopwatch为 测量时间。拨打电话 方法从窗体的 构造函数开始。

在表单显示后, 通常是Application.Idle事件 上升。因此,您可以在此事件的处理程序中调用Stop 方法。 但是,您应该检查此事件 确实确实上升,例如通过使用 System.Diagnostics.Debug.WriteLine, 以及来自 sysinternals.com的工具DebugView。

所以我们可以使用System.Diagnostics.StopWatch这样的:

using System; 
using System.Diagnostics; 
using System.Threading; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Stopwatch stopWatch = new Stopwatch(); 
     stopWatch.Start(); 
     Thread.Sleep(10000); 
     stopWatch.Stop(); 
     // Get the elapsed time as a TimeSpan value. 
     TimeSpan ts = stopWatch.Elapsed; 

     // Format and display the TimeSpan value. 
     string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      ts.Hours, ts.Minutes, ts.Seconds, 
      ts.Milliseconds/10); 
     Console.WriteLine(elapsedTime, "RunTime"); 
    } 
} 

然后当空闲事件触发,我能找到的加载时间,并显示进度条上,但是进度条不显示准确的百分比的加载时间,我认为。

+0

您将能够totell多少时间过去了,但没多少剩余时间。您至少需要两个才能使进度条正常工作。但它仍然不是一个光滑的指示。如果沿线的事情需要更长时间,该怎么办?如果你的进度条也失速,那么它不是一个真正的基于时间的进度条。 – 2009-10-22 00:33:37

+0

@ o.k.w其实你是对的。所以看起来CLR中没有处理这个问题的API或库,并为我们提供了测量加载时间的类型。 – Tarik 2009-10-22 00:41:51

回答

1

这取决于。

什么是您的应用程序加载,为什么需要时间?

一个选项是跟踪启动程序需要多长时间,并使用该持续时间来设置将来的进度条。 (这应该在运行时完成并存储在某处,因为它会随着机器的速度而变化)

对于一个更具体的答案,请告诉我们你正在加载什么。

+1

我认为最好的方法是'System.Diagnostics.Stopwatch'方法 – Tarik 2009-10-22 00:19:26

+0

@Aaron:你不需要那么高的精度 - 你可以简单地检查'DateTime.Now'中的变化。但是,你当然可以使用'StopWatch'。 – SLaks 2009-10-22 01:20:05

5

您的进度条很可能不是真正的剩余时间指示。一种常见的方法是使用完成的加载完成的“步骤数”。

假设你必须运行3个方法,每个方法还有2个子方法。这使得它6.使用6步进度条。如果您基于试用错误,确定哪个“步骤”可能需要更长的时间,并为其分配更多的“步数”

+0

我会说这种方法很常见,因为这是唯一可行的方法。试图猜测负载需要多长时间才是死路一条(似乎我听说过不久之前的某个地方)。 :) – MusiGenesis 2009-10-22 00:17:51

+0

@MusiGenesis:是的,除非我们'强制'加载时间为X秒,如果它在X秒之前完成,则将其停止。这将是非常'不友善'。 SOme机器可能需要超过X秒,并且时间将被拧紧。 :P – 2009-10-22 00:25:37

+0

一种方法是让应用程序每次启动应用程序时测量启动时间,并将运行平均值(可能类似最近3次启动时间)存储在注册表中,然后将其用作猜测多久目前的启动将采取。这只是很多工作,几乎没有收益。我希望人们只会写一些不需要太长时间才能开始的应用程序。是的,iTunes作者,我在跟你说话。 – MusiGenesis 2009-10-22 00:45:33

1

通常,此示例中的进度条不是加载时间,而是加载任务的功能。

您需要查看应用程序在启动时所做的工作,并将百分比值分配给每个步骤。这些值不需要是任意的。相反,在你自己的机器上做一些指标来确定每个任务通常需要多长时间,然后用它来确定你的百分比。

1

我刚刚问了一个非常类似的问题,但不是使用ProgressBar,而是使用标签来显示负载百分比。过去,ProgressBars一直非常不可靠。你可以在这里找到我的帖子:

C# - Display loading 1-100% within 4 seconds

相关问题