stopwatch wariuje

0

generuję kilka tablic po kilkadziesiąt rekordów i mierzac średni czas zapełnienia owych tablic stopwatch wariuje. objawia się to tym iż np przy dwóch tablicach w pierwszej wypisuje średni czas 1134 ticksów a przy drugiej 410 chociaż są one tej samej wielkości ;| jeśli generuję np 10 tablic, tylko w pierwszej tablicy wyniki wychodzą normalne, a może inaczej: mniej podejrzane. jeśli natomiast włożę wszystko do dwóch pętli by jednocześnie generowała najpierw dwie tablice a potem 10 tablic tylko pierwsza tablica z dwóch pierwszych zostanie zbadana prawidłowo, a czas każdej następnej gwałtownie się zmniejsza. czym to może być spowodowane? stopwatch nie pracuje w pętlach?

ps: probowalem za każdym razem deklarowac nowy stopwatch, i probowalem rowniez deklarowac go tylko raz, niestety z podobnym efektem.

0

A wiesz, że podczas tego procesu może być uruchamianych tysiące innych i może to zależeć od kolejnych tysiąca rzeczy? Nie panikuj.

0

Doszedłem do tego dlaczego tak się dzieje. Pierwszy czas dostępu do pierwszej tablicy znacznie odbiega (około 20 razy większy) od pozostałych czasów. Próbuję wstawiać sw.Reset() przed każdym mierzeniem czasu jednak ten jeden początkowy znacznie podnosi średnią. Jak to zresetować?
Pozdrawiam

PS: I proszę się powstrzymać od tego typu komentarzy ze wszystko jest dobrze i nie ma co panikować bo tak mogą wypowiadać się tylko osoby które nie wiedzą o co chodzi.

0

Podaj cos wiecej, ja dla tego kodu


using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;



namespace ConsoleApplication1
{
    class Program
    {
        static void FillTable()
        {
            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();

            Random random = new Random();
           
            int count = 10000000;
            int[] table = new int[count];
            for (int i = 0; i < count; i++)
            {
                table[i] = random.Next(int.MinValue, int.MaxValue);
            }

            stopWatch.Stop();
            TimeSpan ts = stopWatch.Elapsed;

            
            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");
        }

        static void Main(string[] args)
        {
            
            FillTable();
            FillTable();
            FillTable();        
            
            Console.ReadLine();
        }
    }

}

mam (debug)

00:00:01.36
00:00:01.39
00:00:01.40

moze byc zwiazane z JIT.

1 użytkowników online, w tym zalogowanych: 0, gości: 1