Czas dostępu do tablicy

0

Witam.

Muszę napisać program który będzie sprawdzał czas dostępu do kilku struktur danych m.in. do tablicy.

I tu moje pytanie: Co oznacza sprawdzenie takiego czasu. i nie chodzi mi tu o kod, tylko o objaśnienie co trzeba zrobić.

0

Co zrobić? Sprawdzić godzinę, „dostąpić” do struktury jakiś miliard razy (ilość zer dobrać eksperymentalnie), znowu sprawdzić godzinę, odjąć pierwszy czas od drugiego.
Zmienić strukturę, pomiar powtórzyć.
Nie jest to idealny test, ale jakiś w miarę sensowny wynik otrzymamy.

1

Pobierasz w pętli, na przykład 100000 razy, jakiś element z tablicy i liczysz ile czasu to zajęło. Musisz tylko przypilnować żeby kompilator tego nie zoptymalizował.

(btw. http://4programmers.net/Forum/viewtopic.php?id=167658&start=20 )

0

No właśnie chodzi o to "dostąpienie". To może być obojętnie jaka operacja np. przypisanie, sortowanie czy coś innego?

0

Oki, dzięki

0

Do mierzenia czasu przydaje się klasa Stopwatch.

MSM napisał(a)

(btw. http://4programmers.net/Forum/viewtopic.php?id=167658&start=20 )

Zhackowałeś paging na forum? Bo mi otwiera się urwany w połowie wątek, niby jako cała pierwsza strona. Dopiero jak kliknę w "<<", to pojawia się cała pierwsza (i jedyna) strona wątku.

1

Nic nie hackowałem, dałem linka do trzeciej strony wątku. Jeśli jest u ciebie jak mówisz to nie wiem...

0

Somekind - pewnie masz ustawione wyswietlanie wiekszej ilosci postow na strone niz domyslnie. Ja mam ustawione 25 i tez czasami pojawia sie u mnie ten efekt. Jak ktos ma mniej to przykladowo watek w ktorym sa 22 posty bedzie mial u niego 2 strony, a u mnie tylko jedna -> stad to zawirowanie z wyswietlaniem niepelnej (dla mnie)"jedynej" strony.

0

Witam,
mam chyba podobny problem do założyciela wątku.. Jak można pomierzyć czas dostępu do danych zawartych w tablicy?

Jedna z rad była taka:

Pobierasz w pętli, na przykład 100000 razy, jakiś element z tablicy i liczysz ile czasu to zajęło. Musisz tylko przypilnować żeby kompilator tego nie zoptymalizował.

Czyli co.. mam np. utworzyć stosunkowo dużą tablice, wykonać na niej operacje typu w pętli typu: pobierz = tablica[i] i po tej operacji zobaczyć jaki był czas wykorzystując klase stopwatch (c#)

?

0

no… i dlaczego nie spróbujesz? weź tylko pod uwagę, że w C# pierwsze uruchomienie danej funkcji będzie znacznie wolniejsze od następnych. dlatego podczas jednego uruchomienia programu wykonaj ją najpierw „na próbę”, a dopiero potem jako właściwy pomiar.

0

@Azarien - dzięki za odpowiedź. Zrobiłam tak jak napisałam wyżej.. Dzięki za sugestie z próbą pomiarów..

Mam jeszcze tylko jedno pytanie.. jak to mierzyć? bo ogólnie czasy są bardzo małe i zrobiłam tak:

accessTime = objWatchArray.ElapsedTicks;
accessTimeMili = objWatchArray.Elapsed.TotalMilliseconds;

*te pierwsze to jest prawdopodobnie ilość taktów zegara, tutaj wynik jest większy (7410).. ale dokładnie nie wiem jak one są mierzone..(ile to czasu..) | milisekund jest gdzieś koło: 4,607

Być może można lepsze jednostki dobrać.. (jakby co proszę o sugestie).

Ale nie chcąc tworzyć nowego wątku zrobię mały offtop..
Chciałabym się dowiedzieć jeszcze jednej (ważnej) dla mnie rzeczy..

Mianowicie mam tego typu zadanie:

Wyznacza różnicę w czasie wykonania sortowania (quicksort) dla platformy .Net w wersji 2.0
oraz 3.5.

Jak można to zrobić? Rozumiem, że trzeba zmienić wersje używanego frameworka w VS -> Properties -> Application -> Target framewrok , ale czy jest to możliwe aby wykonać to jednocześnie tzn. aby program wykonał sortowanie w wersji 2.0, potem 3.5 i następnie wykazał różnice ?? (czy jednak trzeba po kolei wybierać różne wersje i 'ręcznie' zestawić ze sobą wyniki..)

0
marlena15 napisał(a):

Być może można lepsze jednostki dobrać.. (jakby co proszę o sugestie).

Wykonaj test wielokrotnie (np. tysiąc razy), aż zmierzony czas będzie rzędu kilku-kilkunastu-kilkudziesięciu sekund.

Ale nie chcąc tworzyć nowego wątku zrobię mały offtop..

Od początku powinnaś utworzyć nowy wątek.

(czy jednak trzeba po kolei wybierać różne wersje i 'ręcznie' zestawić ze sobą wyniki..)

Możesz napisać skrypt (dla konsoli lub PowerShella), który wywoła kompilator C# z odpowiednimi parametrami, a potem uruchomi program.

0
somekind napisał(a):

(czy jednak trzeba po kolei wybierać różne wersje i 'ręcznie' zestawić ze sobą wyniki..)

Możesz napisać skrypt (dla konsoli lub PowerShella), który wywoła kompilator C# z odpowiednimi parametrami, a potem uruchomi program.

Zapewne jest to jakieś rozwiązanie.. ale z poziomu Visual Studio raczej tego się w taki sposób nie da zrobić?

0
marlena15 napisał(a):

Zapewne jest to jakieś rozwiązanie.. ale z poziomu Visual Studio raczej tego się w taki sposób nie da zrobić?

Możesz użyć VS do napisania skryptu.

2
marlena15 napisał(a):

jak to mierzyć? bo ogólnie czasy są bardzo małe i zrobiłam tak:

accessTime = objWatchArray.ElapsedTicks;

*te pierwsze to jest prawdopodobnie ilość taktów zegara, tutaj wynik jest większy (7410).. ale dokładnie nie wiem jak one są mierzone..(ile to czasu..)

bo do Stopwatch nie działa intellisense i dodatkowo nie ma helpa, przycisk F1 na klawiaturze Ci się zepsuł, masz bana na google i bing, a skrót msdn powoduje u Ciebie rozwolnienie albo chociaż ostrą reakcję uczuleniową. bo że wyszukiwarka na 4programmers nie działa to oczywiste.

0
ŁF napisał(a):

bo że wyszukiwarka na 4programmers nie działa to oczywiste.

Yhy, tak się składa, że to akurat najprawdziwsza prawda ;]

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