2009-10-22 102 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

相關問題