2009-10-22 5 views
0

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

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

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

С уважением.

Edit:

Что я нашел, как решение:

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

+0

Вы сможете totell, сколько времени прошло, но не то, сколько времени осталось. Вам нужно, по крайней мере, оба, чтобы заставить индикатор выполнения работать. НО это все еще негласное указание. Что, если что-то вдоль линии займет гораздо больше времени. Если ваш индикатор прогресса тоже стоит, то это не настоящий баг с индикацией времени. –

+0

@ o.k.w ну на самом деле вы правы. Таким образом, кажется, что в CLR нет API или библиотеки, которые справляются с этой проблемой и предоставляют нам типы для измерения времени загрузки. – Tarik

ответ

1

Это зависит.

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

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

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

+1

Я думаю, что лучший способ - это метод 'System.Diagnostics.Stopwatch' – Tarik

+0

@Aaron: вам не нужен такой уровень точности - вы могли бы просто проверить изменение в' DateTime.Now'. Однако вы, безусловно, можете использовать «StopWatch». – SLaks

5

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

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

+0

Я бы сказал, что этот подход распространен, потому что это единственный подход, который может работать. Пытаясь угадать, сколько времени займет загрузка, это тупик (похоже, я слышал, что где-то не так давно). :) – MusiGenesis

+0

@MusiGenesis: Да, если мы не «заставим» время загрузки на X секунд, если оно закончится до X секунд, остановите его. Это будет очень «недружелюбно». Машина SOM может занять более X секунд, и время будет завинчено. : P –

+0

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

1

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

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

1

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

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

Смежные вопросы