A to jeszcze nie koniec możliwości optymalizacji. W dodatku takie porównania nie mają większego sensu. Dlaczego? Po pierwsze - porównujesz dwie różne rzeczy. Runtime obu języków jest diametralnie inny. To tak jak z porównywaniem co lepsze - diesel czy benzyniak. A
to usuwanie obiektów "po kolei" z tablicy wykonałem celowo ;)
@csharp-dev: to akurat nie jest kosztowna operacja. Natomiast kosztowne są alokacje. Zysk jest głównie na tym, że obiekty są tworzone od razu, a nie po jednym :)
@slx2000: Fakt. Pewnie też bym to tak zrobił, gdyby nie fakt, że to była moja pierwsza styczność z obiektowością w C++. Tym bardziej dzięki za uwagi! :)
Cześć, biorąc pod uwagę specyfikę działanie programów C#, czy nie wypadało by doliczyć czasu, który JIT potrzebuje na skompilowanie kodu? Twój benchmark liczy tylko czas wykonania skompilowanego kodu - i to jest ok jeśli taki był plan.
@ylem: Witaj ;) Chodziło mi właśnie tylko o sprawdzenie w ile czasu wykona się kod w obu przypadkach. Jeżeli chodzi o JIT to ewentualny spadek wydajności będzie występował tylko podczas pierwszego wykonania się programu, więc nie wydaje mi się, żeby zasadnym było to uwzględniać w teście. Jednak warto o tym pamiętać.
@8c7b: Jest dokładnie tak jak mówisz. Zaznaczyłem to przecież we wpisie :) "W C# czasy te są tak dobre, ponieważ obiekty nie są usuwanie ręcznie, (czego w C# się nie robi) lecz są wypełniane null’ami, aby Garbage Collector wiedział, że należy je zniszczyć."
Ale gowno, nie masz zielonego pojecia o programowaniu w C++. Obiekty w C++ praktycznie tworzysz dwa razy, uzywasz funkcji z C a nie z C++, uzywasz jakis zewnetrznych bilbliotek (conio.h? co to za shit), uzywasz najbardziej nieoptymalnych funkcji. Uzywasz this....
@kapelusz: Żeby je zdobyć? ;) PS: Jeżeli uważasz, że zrobiłem coś źle, to jestem otwarty na konstruktywną krytykę. Niestety, kolega wyżej nie potrafił odpowiedzieć na moje pytania... Teksty "po co", "ale gówno", "co to za shit" niewiele wnoszą do tematu.
Komentarze (14)
najlepsze
przed:
Create objects time: 4.19461
Deleting objects time: 0.333815
po:
Create objects time: 2.16918
Deleting objects time: 0.33181
A to jeszcze nie koniec możliwości optymalizacji.
W dodatku takie porównania nie mają większego sensu. Dlaczego? Po pierwsze - porównujesz dwie różne rzeczy. Runtime obu języków jest diametralnie inny. To tak jak z porównywaniem co lepsze - diesel czy benzyniak. A
@csharp-dev: to akurat nie jest kosztowna operacja. Natomiast kosztowne są alokacje. Zysk jest głównie na tym, że obiekty są tworzone od razu, a nie po jednym :)
Twój benchmark liczy tylko czas wykonania skompilowanego kodu - i to jest ok jeśli taki był plan.
Pozdrawiam!
cars[i] = null;
nie jest równoważne z wywołaniem zwolnienia obiektu w C++:
delete(cars[i]);
Faktyczne zwolnienie pamięci w C# następuje dopiero wtedy gdy włączy się odśmiecacz (garbage collector).
"W C# czasy te są tak dobre, ponieważ obiekty nie są usuwanie ręcznie, (czego w C# się nie robi) lecz są wypełniane null’ami, aby Garbage Collector wiedział, że należy je zniszczyć."
Ale gowno, nie masz zielonego pojecia o programowaniu w C++. Obiekty w C++ praktycznie tworzysz dwa razy, uzywasz funkcji z C a nie z C++, uzywasz jakis zewnetrznych bilbliotek (conio.h? co to za shit), uzywasz najbardziej nieoptymalnych funkcji. Uzywasz this....
Taki kod wstydzi sie oddac student.
@csharp-dev: to po co zabierasz się za tworzenie "benchmarka" ;/
PS: Jeżeli uważasz, że zrobiłem coś źle, to jestem otwarty na konstruktywną krytykę. Niestety, kolega wyżej nie potrafił odpowiedzieć na moje pytania... Teksty "po co", "ale gówno", "co to za shit" niewiele wnoszą do tematu.