Wpis z mikrobloga

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


a u kolegi w super C Sharpie



troche #humorinformatykow
  • 41
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ogrod87: O czym my tu w ogóle dyskutujemy jak >99% czasu działania tego programu w C# to narzut na odpalenie środowiska dotnetowego i inicjalizacja różnych bibliotecznych pierdół:))
  • Odpowiedz
@BloodDeath94: nie wiem jak to mierzycie, ale tutaj masz przykładowy assembler z C który otwiera plik, wczytuje 64 bajtów i zamyka plik:

mov DWORD PTR [esp+4], OFFSET FLAT:LC0

mov DWORD PTR [esp], OFFSET FLAT:LC1

call fopen

mov
  • Odpowiedz
@BloodDeath94: generalnie nie powinno się pobierać wartości clock i interpretować jej jako cykle zegarowe.

The value returned is expressed in clock ticks, which are units of time of a constant but system-specific length (with a relation of CLOCKSPERSEC clock ticks per second).

Głównie dlatego, że aktualne procesory mają chociażby zmienne taktowanie oraz procesy skaczą między różnymi rdzeniami.
Jedyny słuszny sposób porównywania to czas i też w taki sposób,
  • Odpowiedz
  • 0
@YuiMizuno na komputerze kolegi mój program wykonywał się jeszcze szybciej niż u mnie.
Jakby różnice były w dziesiątkach albo setkach tickow to bym był skłonny sądzić że możliwe że przy lepszym sposobie porównania różnice byłyby mniejsze.

Ale najmniejsza wartość jaka uzyskaliśmy dla csharpa to 14k

A największą dla c++ to było kilkadziesiąt
  • Odpowiedz
@BloodDeath94: tak, tylko nie wypada porównywać dwóch rzeczy mając zupełnie 2 różne metody pomiarowe. Kto wie czy obie metody mają dokładnie taką samą liczbę 'ticków' na sekundę?
W moim prostym przykładzie na otwarcie pliku, odczytanie i zamknięcie go uzyskuję wynik 0 ticków w clock().
A jak dodam Sleep(1000) to już uzyskuję 1016 ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@BloodDeath94: pomiar czasu wykonania całego pliku wykonywalnego.
I jeżeli chcesz pominąć narzut czasu uruchomienia programu, to tych operacji powinno być dużo. Nawet rzędu kilkuset tysięcy.
No i najlepiej by było przy każdej iteracji otwierać inny plik, żeby nie ryzykować cache'owania zawartości plików.
  • Odpowiedz
@BloodDeath94: Stoperem. Na tym samym urządzeniu. I przy zbliżonej implementacji. On może zapisywać do pamięci a Ty wypisywać na ekran. Piszę w C++ na co dzień, często piszę w C# i C++/CLI jestem pewien, że wyniki nie są w ogóle miarodajne.
  • Odpowiedz