2014-12-23 73 views
0

每個X秒我搶的當前時間的樣品和速度如何使用樣本C#

(time/number of objects created) = avg speed 

我想寫一個瞭解如何使用樣本來計算更好的平均速度一個類來計算速度。

剛開始以爲速度爲雙[],然後平均化使用LINQ,但由於定時器和線程不是確定性的,我可能已經在

  • 4秒
  • 4.2秒採集的樣品
  • 5.1秒
  • 5秒
  • 5秒
  • 4.101秒

等。

我認爲時間跨度爲標誌,但這也正好說明行之間的增量。 所以我想也許是Tuple或KeyValue,但是用TimeSpan計算平均速度並不那麼簡單

有沒有人有想法?

謝謝

+0

整點要花時間測量不是物體測量。我想知道我每5秒創造出多少個對象讓我們說。 –

回答

1

使用定時器/秒錶的組合來控制實時:

StopWatch watch; 
Timer tmr; 

List<double> samples; 

void initSampling() 
{ 

    samples = new List<double>(); 
    watch = new Stopwatch(); 
    tmr = new Timer(); 
    tmr.Tick += tmr_Tick; 
    tmr.Interval = 1000; 
    tmr.Start(); 
    watch.Start(); 
} 

void tmr_Tick(object sender, EventArgs e) 
{ 

    double items = ...;//store the number of items created 
    watch.Stop(); 

    double itemsPerSec = items/watch.ElapsedMilliseconds; 

    double timePerItem = 1.0/itemsPerSec; 

    samples.Add(timePerItem); 

    watch.Restart(); 
} 
+0

有趣,但我正在尋找相反的。我想知道創建對象需要多長時間,而不是勾選多少個對象。 –

+0

得到itemsPerSec的反函數,並且你有構造一個項目的長度......改變了我的答案以反映這一點。 – Gusman

0

在每個'tick'存儲當前時間。 根據上次打勾後的物品數量和最後打勾的時間戳,您可以計算最近一次打印時間的物品數量。將該值與間隔長度一起存儲在列表中(例如以毫秒爲單位)。

您的整體平均值(正好)是此列表的加權平均值。 (權重是毫秒)

+0

我的項目運行了幾個小時,在您當前的答案下,我將只在統計表上完成我的記憶。 –

+0

對不起,但聽起來像是誤會。你能提供一個例子:4.9s後有多少個對象,下一個5.1s後有多少個對象等等?我會解釋我的意思是用你的數據。 – DrKoch