2009-06-26 15 views
40

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?

+0

Uwielbiam to pytanie. – jjnguy

+0

Możesz chcieć sprawdzić to: http://shootout.alioth.debian.org/. Ale zauważ, że testują C# z Mono, a nie z Microsoft.NET. –

+4

Jak to jest "subiektywne i kłótliwe", czy istnieje takie badanie? –

Odpowiedz

21

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.

+45

Nie sądzę, że porównywanie Javy z Mono ma sens, a środowisko MS .NET jest prawdopodobnie dużo szybsze niż Mono. –

+3

@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. –

+4

@ammoQ, Jakieś szczególne powody, by sądzić, że .NET jest szybszy niż Mono domyślnie? –

4

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?

+5

Ta odpowiedź jest raczej komentarzem niż odpowiedzią. –

+0

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. –

+1

Nie martw się, przynajmniej jest dłuższy niż komentarz 600 znaków! : D – DMan

10

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.

...

+7

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. " –

+5

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

+0

Ponownie mono jest 100% wolniejsze niż CLR – user1496062

4

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.

Powiązane problemy