【问题标题】:How to measure an application loading time?如何测量应用程序加载时间?
【发布时间】:2009-10-22 00:10:31
【问题描述】:

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

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

提前致谢。

真诚的。

编辑:

我发现的解决方案是:

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

表格显示后, 通常是 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");
    }
}

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

【问题讨论】:

  • 您将能够知道过去了多少时间,但不知道还剩多少时间。您至少需要两者才能使进度条正常工作。但它仍然不是一个顺利的迹象。如果沿线的某些事情需要更长的时间怎么办。如果您的进度条也停止,那么它就不是真正的基于时间的进度条。
  • @o.k.w 实际上你是对的。因此,CLR 中似乎没有 API 或库可以处理此问题并为我们提供类型来测量加载时间。

标签: c# process splash-screen


【解决方案1】:

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

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

【讨论】:

  • 我想说这种方法很常见,因为它是唯一可行的方法。试图猜测负载需要多长时间是一个死胡同(好像我不久前在某个地方听说过)。 :)
  • @MusiGenesis:是的,除非我们“强制”加载时间为 X 秒,如果它在 X 秒之前完成,则停止它。那将是非常“不友好”的。有些机器可能需要超过 X 秒,而且时间会被搞砸。 :P
  • 一种方法是让应用程序在每次应用程序启动时测量启动时间,并将运行平均值(可能是最近 3 次启动时间)存储在注册表中,然后将其用作猜测当前启动需要多长时间。这只是一项几乎没有回报的大量工作。我希望人们只写一开始就不需要那么长时间的应用程序。是的,iTunes 作者,我在和你说话。
  • @MusiGenesis:听起来像是一个很好的“框架”,可以准确估计加载时间。 :)
【解决方案2】:

视情况而定。

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

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

如需更具体的答案,请告诉我们您正在加载什么。

【讨论】:

  • 我认为最好的方法是System.Diagnostics.Stopwatch方法
  • @Aaron:你真的不需要那种精确度——你可以简单地检查DateTime.Now 中的变化。但是,您当然可以使用StopWatch
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      您应该具有在程序启动时检查程序中的记录或值的功能。然后只需使用 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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多