Wyciągnięcie wszystkich oczywistych zastrzeżeń związanych z benchmarkami i porównaniem benchmarków, czy istnieje jakieś badanie (zestaw dobrze udokumentowanych i bezstronnych testów), które porównuje średnią szybkość realizacji dwóch wymienionych języków? DziękiJava vs C#: Czy są jakieś badania, które porównują szybkość ich wykonania?
Odpowiedz
Najlepszym porównaniem, o którym mam świadomość, jest The Computer Language Benchmarks Game.
Porównuje prędkość, wykorzystanie pamięci i rozmiar kodu źródłowego dla (obecnie) 11 testów w dużej liczbie języków programowania. Implementacje benchmarków są zgłaszane przez użytkowników i są stale ulepszane, więc notowania nieco się zmieniają.
Wszystkie porównania są wykonywane na systemie Linux, więc mierzy się C#/Mono, a nie C#/Microsoft.NET. Ale mam wrażenie, że te dwa są obecnie porównywalne pod względem szybkości.
Currently Java is winning on speed, but C#/Mono is winning on memory use., ale zauważ, że z jakiegoś powodu implementacje Java są wielowątkowe, podczas gdy większość implementacji C#/Mono jest singlethreaded.
Nie sądzę, że porównywanie Javy z Mono ma sens, a środowisko MS .NET jest prawdopodobnie dużo szybsze niż Mono. –
@ammoQ: To też był mój domysł. Ale sprawdziłem to i następujący artykuł wydaje się wskazywać, że wydajność jest porównywalna: http://geekswithblogs.net/CISCBrain/articles/Mono_vs_dotNet_Performance_Test.aspx. –
@ammoQ, Jakieś szczególne powody, by sądzić, że .NET jest szybszy niż Mono domyślnie? –
To może zaproponuić ostrzeżenie, ale hej, to moja opinia ...
Po pierwsze, jeśli witryna działa zbyt wolno, potrzebny będzie lepszy sprzęt. Lub więcej sprzętu i dodaj równoważenie obciążenia do swojej witryny. Jeśli jesteś Google, otrzymasz ogromne farmy serwerów z tysiącami komputerów, które zapewnią błyskawiczną wydajność, nawet jeśli same witryny są opracowane w nieaktualnym języku.
Większość języków została zoptymalizowana w celu uzyskania najlepszego sprzętu i przewyższa wszelkie inne języki w tym specyficznym środowisku z określoną konfiguracją. Porównywanie języków nie ma większego sensu, ponieważ istnieją tysiące technik optymalizacji ich jeszcze bardziej. Poza tym, jak mierzysz wydajność na samym początku?
Powiedzmy, że patrzysz na szybkość wykonania. Język X może wykonać pewne zadanie 2 razy szybciej niż język Y. Jednak język Y jest bardziej zoptymalizowany pod kątem uruchamiania wielu wątków i może obsługiwać 10 razy więcej użytkowników niż język X w tym samym czasie. Połączenie tego i Y będzie znacznie szybsze w środowisku klient/serwer.
Ale potem zainstaluj X na zoptymalizowanym systemie z systemem operacyjnym, który X bardzo lubi, z dodatkowym sprzętem, bajtami z grzechotką pamięci i miejsca na dysku, a kilkanaście procesorów i X znów pokona Y.
Jaka jest więc wartość znajomości szybkości wykonywania języków? A może nawet porównanie języków? Skąd wiemy, że ci, którzy stworzyli raport, nie byli stronniczy? W jaki sposób jesteśmy pewni, że używali najbardziej optymalnych ustawień dla każdego języka? Czy nawet napisali najbardziej optymalny kod do przetestowania? A jak w ogóle porównujesz wyniki końcowe? Czas wykonania na użytkownika? Czy całkowity czas realizacji?
Powrót do języków X i Y. X uruchamia zadanie w ciągu 2 sekund, ale obsługuje tylko 10 wątków naraz, czyli 10 użytkowników. Y potrzebuje 6 sekund, ale jednocześnie obsługuje do 50 wątków. X byłby szybszy dla każdego użytkownika. W dwie sekundy X przetworzył 10 użytkowników. W 6 sekund X przetworzył 30 użytkowników. Ale Y do tego czasu przetwarzałby 50 użytkowników. Tak więc Y byłby lepszy od X, gdy masz wielu użytkowników, podczas gdy X wykonałby Y z małą liczbą użytkowników. (Lub wątki.) Byłoby interesujące zobaczyć raporty o tym, prawda?
Ta odpowiedź jest raczej komentarzem niż odpowiedzią. –
Zasadniczo mówię, że nie można porównywać dwóch różnych języków, nawet jeśli są bardzo podobne, takie jak C# i Java. W związku z tym porównanie języków jest bezużyteczne, o ile nie porównuje się do określonego obszaru. –
Nie martw się, przynajmniej jest dłuższy niż komentarz 600 znaków! : D – DMan
Oto nice recent study na ten temat:
wydajność numeryczne w C, C# i Java
Peter Sestoft ([email protected])
IT University of Copenhagen Dania
Wersja 0.9.1 z 2010-02-19
Streszczenie: Porównujemy numeryczne działanie C, C# i Java w trzech małych przypadkach.
...
Wniosek z artykułu: "Eksperymenty pokazują, że nie ma oczywistej zależności pomiędzy szybkościami wykonywania różnych platform oprogramowania, nawet dla bardzo prostych programów tutaj badanych: platformy C, C# i Java są różnie najszybsze i najwolniejszy. " –
Wykonali programy testowe w systemie Mac OS X. W języku C# używali mono i używali maszyny wirtualnej do testowania wydajności środowiska wykonawczego .net. Moim zdaniem wartości wzorcowe C# są błędne. – user23127
Ponownie mono jest 100% wolniejsze niż CLR – user1496062
Oba języki ewoluują pod względem wydajności. Przynajmniej w 2013 roku, Microsoft własne Joe Duffy blogged:
Java jest bliżej [do C++ w ramach wykonywania] niż C#, dzięki doskonałej pracy w HotSpot-like maszyn wirtualnych, które zatrudniają kodu pitching i stos alokacji.
- 1. Java - Czy są jakieś Stream Collectors, które zwracają ImmutableMap?
- 2. Czy są jakieś języki, które implementują generics _well_?
- 3. Koszt zapytania a szybkość wykonania + paralelizm
- 4. Czy są jakieś narzędzia, które obsługują refaktoryzację resx w Xaml?
- 5. Czy są jakieś narzędzia, które mogą wbudowywać css?
- 6. Czy są jakieś "wzorce projektowe" w C?
- 7. Czy są jakieś .NET ESB?
- 8. WSZYSTKIE CZAPKI NA NAWIGACJĘ? Czy są jakieś badania za lub przeciw?
- 9. Czy są jakieś badania dotyczące częstych zmian hasła lub przeciw niemu?
- 10. Czy są jakieś powszechnie stosowane implementacje IQueryable?
- 11. Czy są jakieś alternatywy open-source do ReplayDIRECTOR/Chronon Debugger?
- 12. Czy są jakieś detektory, które zostały zaimplementowane na GPU i czy są skalowane/niezmienne?
- 13. Czy są jakieś rozpowszechnione, nowoczesne konwencje kodowania Java?
- 14. Czy są jakieś alternatywne prace Cron?
- 15. Czy są dostępne jakieś implementacje filtrów Bloomiera?
- 16. Czy są jakieś add_days w datach ruby?
- 17. Czy są jakieś przykłady kompilatorów JIT wielowątkowych?
- 18. Czy są jakieś podcasty o Delphi?
- 19. Czy są jakieś narzędzia Lint XSL?
- 20. Czy są jakieś dobre agregatory wiadomości C#, .net?
- 21. Czy są jakieś solidne implementacje dużych liczb całkowitych w C?
- 22. Czy są jakieś różnice między "zsynchronizowaną" Javą i "blokadą" C#?
- 23. Czy są jakieś współbieżne pojemniki w C++ 11?
- 24. Czy są dostępne jakieś godne alternatywy CSLA?
- 25. Czy dostępne są jakieś biblioteki ccTalk?
- 26. Czy są jakieś alternatywy do SDK BoxedApp?
- 27. Czy są jakieś tutoriale, aby pomóc biegły programista C++ uczyć się c?
- 28. Czy są jakieś standardy zwane GUI?
- 29. Czy są jakieś formatery kodu Sass?
- 30. Vs wykonania. call Join point
Uwielbiam to pytanie. – jjnguy
Możesz chcieć sprawdzić to: http://shootout.alioth.debian.org/. Ale zauważ, że testują C# z Mono, a nie z Microsoft.NET. –
Jak to jest "subiektywne i kłótliwe", czy istnieje takie badanie? –