Как измерить время загрузки приложения? - PullRequest
0 голосов
/ 22 октября 2009

Мне интересно, как измерить приложение Loading Time, когда пользователь запускает процесс, экземпляр приложения, чтобы я мог показать индикатор выполнения или что-то, что информирует пользователей о том, что происходит, когда приложение загружается или насколько загрузка приложения завершена.

Я имею в виду, что если я хочу показать текущий прогресс с помощью индикатора выполнения, я думаю, что могу определить текущий процесс с помощью чисел, чтобы я мог увеличить свойство Value элемента управления ProgressBar.

Заранее спасибо.

С уважением.

Редактировать:

В качестве решения я нашел следующее:

Вы можете использовать System.Diagnostics.Stopwatch для время измерения. Позвоните в Метод Начало в начале конструктор формы.

После отображения формы обычно событие Application.Idle поднимается. Таким образом, вы можете вызвать Стоп метод в обработчике для этого события. Но вы должны проверить, что это событие действительно поднимается, например используя 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, я смогу найти время загрузки и показать его на индикаторе выполнения, но индикатор выполнения не будет отображать точный процент времени загрузки, я думаю.

Ответы [ 5 ]

5 голосов
/ 22 октября 2009

Маловероятно, что ваш индикатор прогресса будет истинным показателем оставшегося времени. Распространенным подходом является использование количества «завершенных» шагов к завершению загрузки.

Скажем, вам нужно запустить 3 метода, и у каждого есть еще 2 вспомогательных. Это делает это 6. Используя 6 шагов индикатор выполнения. Если в результате пробного запуска вы обнаружили ошибку, определите, какой «шаг» может занять больше времени, и присвойте им больше «количество шагов»

1 голос
/ 22 октября 2009

Я только что задал очень похожий вопрос, но вместо использования ProgressBar я использую метку для отображения процента загрузки. В прошлом ProgressBars были очень ненадежными. Вы можете найти мой пост здесь:

C # - загрузка дисплея 1-100% в течение 4 секунд

1 голос
/ 22 октября 2009

Как правило, индикаторы выполнения в этом примере являются не функцией времени загрузки, а задачами загрузки.

Вам нужно посмотреть на работу, которую ваше приложение выполняет при запуске, и назначить процентные значения для каждого шага. Значения не должны быть произвольными. Вместо этого сделайте некоторые метрики на своем компьютере, чтобы определить, сколько времени обычно занимает каждая из этих задач, а затем используйте это для определения ваших процентов.

1 голос
/ 22 октября 2009

Это зависит.

Какая загрузка вашего приложения и почему это занимает время?

Один из вариантов - отслеживать, сколько времени потребуется для запуска программы, и использовать эту продолжительность для установки индикатора выполнения в будущем. (Это должно быть сделано во время выполнения и где-то сохранено, потому что оно будет зависеть от скорости машины)

Для более конкретного ответа, пожалуйста, сообщите нам, что вы загружаете.

0 голосов
/ 25 июня 2018

У вас должна быть функция, которая проверяет запись или значения в программе при запуске программы. Затем просто используйте 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();
    }
}
...