簡體   English   中英

如何計算多個秒表時間的平均值?

[英]How to calculate the average of multiple Stopwatch times?

所以基本上我要做的是計算我的 for 循環產生的所有秒表時間的平均值並將其輸出到控制台。 我知道如何取平均值,但我不知道如何將其應用於秒表時間。 請幫忙?

for (int index = 0; index < iterations; index++)
        {
            // loop to generate an array of random numbers      
            for (int count = 0; count < arrayOfInts.Length; count++)
            {
                arrayOfInts[count] = r.Next(numitems);
            }
            // a random array has been created start the clock and sort it
            Stopwatch elpased = new Stopwatch();
            elpased.Start();
            selectionSort(arrayOfInts);
            elpased.Stop();

            if (iterations == iterations) 
            {

                var average = elpased.Elapsed;

                Console.WriteLine ("Time for ___ sort to complete: " + elpased.Elapsed.ToString ());
            }
            }



            Console.ReadLine();
    }

這就是我到目前為止所擁有的。

我建議改用ElapsedTicks 您需要存儲每次迭代的刻度,然后計算平均值:

List<long> ticks = new List<long>();
for (int index = 0; index < iterations; index++)
{
    // loop to generate an array of random numbers      
    for (int count = 0; count < arrayOfInts.Length; count++)
    {
        arrayOfInts[count] = r.Next(numitems);
    }
    
    // a random array has been created start the clock and sort it
    Stopwatch elapsed = new Stopwatch();
    elapsed.Start(); 
    selectionSort(arrayOfInts);
    elpased.Stop();
    ticks.Add(elapsed.Elapsed.Ticks);
}

double avg = ticks.Average(); // create average of ticks
TimeSpan averageTimeSpan = new TimeSpan((long)avg); // cast needed from double to long

有一種更優雅的方式來生成隨機數數組:

arrayOfInts = Enumerable.Range(0, count).Select(i => r.Next(numitems)).ToArray();

由於 LINQ 使用延遲執行,您甚至可以預先聲明此“查詢”並在迭代中調用ToArray()

List<long> ticks = new List<long>();
IEnumerable<int> randomQuery = Enumerable.Range(0, count).Select(i => r.Next(numitems));

for (int index = 0; index < iterations; index++)
{
     //creates NEW random numbers each time, because of deferred execution
     arrayOfInts = randomQuery.ToArray(); 

     ...

另一個建議是讓Stopwatch測量整個時間並將結果除以iterations Stopwatch可以恢復:

IEnumerable<int> randomQuery = Enumerable.Range(0, count).Select(i => r.Next(numitems));
Stopwatch elapsed = new Stopwatch(); // only ONE instance needed
for (int index = 0; index < iterations; index++)
{
     arrayOfInts = randomQuery.ToArray();
     elapsed.Start(); // resumes without a reset
     selectionSort(arrayOfInts);
     elpased.Stop();
}
TimeSpan averageTimeSpan = new TimeSpan(elapsed.ElapsedTicks/iterations);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM