Na #studbaza mieliśmy zrobić program który m.in. ma przemielić plik z danymi. Ja robiłem w #cpp, kolega w #csharp "bo nie trzeba pisać tyle kodu" u mnie wczytanie pliku i sparsowanie danych zajmuje około
ok ludzie, to ja, ten kolega od csharpa. nie dawało mi to spokoju strasznie, że między wydajnością c++ i csharpa może być tak wielka różnica. wszystko przez to, że uwierzyłem na słowo, że tick to tick, różni sie dla procków wiadomo, ale to jest przyjęcie rozkazu. moje wątpliwości byly jeszcze spowodowane tym, że odpalam visuala na wirtualce, bo nie moge zainstalować net frameworka u siebie, bo jakiś poważny błąd rejestru, i za c---a nie moge tego rozwiązać, więc stwierdziłem, że "pewnie zamula". jakie było moje zdziwienie, że tick z obydwu metod pomiarowych ma c---a z prawidziwym tickiem wspólnego i jest stały w czasie dla metody pomiarowej (!). okazało się też, że dla każdej metody można sprawdzić tę stałą.
tak więc, dla metody w c++ (clock()) tick to 1000 cykli na sekundę, czyli praktycznie biorąc milisekunda. moja metoda pomiarowa ma dokładność 1000000 (miliona) cykli na sekundę.
także sami możecie sobie obliczyć, ile c++owych ticków zajmuje to moje "16-17 tysięcy". 1.6, 1.7 c++owego ticka.
@BloodDeath94: > Funkcja clock ( ) zwraca przybliżoną wartość czasu procesora zużytego przez program. Wartość ta jest wyrażona w jednostkach, których CLOCKSPERSEC przypada na jedną sekundę (czyli clock()/CLOCKSPERSEC jest czasem wyrażonym w sekundach). CLOCKSPERSEC zgodnie ze standardem POSIX powinnobyć stałą równą 1 000 000 bez względu na rzeczywistą wartość cyklu
@BloodDeath94: chciałem zrobić rzetelne testy w millisekundach, więc powieliłem ten nasz mały pliczek z danymi (150 linii) do pliku 108 MB (3 645 000 linii danych, 7441 ms, (liczyłem k---a ze stoperem, więc Stopwatch nie kłamie)). mój program zdzierżył bez przeróbki, nawet średnie i te inne pierdoły policzył, twój nie chciał ruszyć, od razu sie wywalał. sprawdziłem plik 05 MB (15 000 linii), twój zdzierżył, 4.5 MB (150 000 linii) już nie chciał. także przetestowałem program na pliku 0.5 MB.
u mnie wczytanie pliku i sparsowanie danych zajmuje około
a u kolegi w super C Sharpie
tak więc, dla metody w c++ (clock()) tick to 1000 cykli na sekundę, czyli praktycznie biorąc milisekunda. moja metoda pomiarowa ma dokładność 1000000 (miliona) cykli na sekundę.
także sami możecie sobie obliczyć, ile c++owych ticków zajmuje to moje "16-17 tysięcy". 1.6, 1.7 c++owego ticka.
program
śmieszny żart, nawet csharpowie funkcje mają dokładność tysięcznej części ms, co dopiero o milionowej mówić
pogrzeb sobie w niecie i zastanów sie, dlaczego wszyscy piszą, że czas w ms oblicza się jako
(stop-start)/(CLOCKS_PER_SEC/1000)
a nie jak napisałeś
std::cout<<"C++ elapsed [ms] "<<((stop-start)*1.0)/ (CLOCKS_PER_SEC / 1000.0)<<std::endl<<std::endl;
C++ elapsed [ms]: 482
Console.WriteLine("C# elapsed [ms]: " + stopwatch.ElapsedTicks * 1.0 / (Stopwatch.Frequency/1000.0));
C# elapsed
Czas 1: 75
Czas 2: 99134
C++ elapsed