如何衡量应用程序加载时间?

时间:2009-10-22 00:10:32

标签: c# process splash-screen

我想知道如何在用户启动流程,应用程序实例时测量应用程序Loading Time,以便我可以显示进度条或某些内容,通知用户在加载应用程序时发生了什么或者完成了多少应用程序加载

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

提前致谢。

此致。

修改:

我发现的解决方案是:

  

你可以使用   System.Diagnostics.Stopwatch for   测量时间。拨打电话   方法从头开始   形式的构造函数。

     

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

所以我们可以像这样使用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");
    }
}

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

5 个答案:

答案 0 :(得分:5)

您的进度条不太可能真实地显示TIME剩余时间。一种常见的方法是使用完成加载完成的“步骤”数量。

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

答案 1 :(得分:1)

取决于。

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

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

如需更具体的答案,请告诉我们您要加载的内容。

答案 2 :(得分:1)

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

您需要查看应用程序在启动时所执行的工作,并为每个步骤指定百分比值。值不必是任意的。相反,在您自己的计算机上执行一些指标,以确定每个任务通常需要多长时间,然后使用它来确定您的百分比。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您应该具有在程序启动时检查程序中记录或值的功能。然后,只需将Timer与timer_Tick()的属性函数一起使用,即可将函数放入timer_tick()中,然后只需要花费时间即可打开程序。

private void Button1_Click(object sender, EventArgs e)
{
    timer1.Start();


}

private void timer1_Tick(object sender, EventArgs e)
{
    ProgressBar1.Value += 1;

    if(ProgressBar1.Value==100)
    {
        timer1.Stop();
        Form1 f1 = new Form1();
        this.Hide();
        f1.Show();
    }
}