różnica w szybkości C++ vs C++/CLI i C#

0

Witam,
mam następujące pytanka:

  1. Język C++ jest podobno szybszy od C#, Czy ta szybkość dot. uruchamiania się programu, jego działania, szybkości wykonywanych obliczeń czy jeszcze jakiś innych rzeczy? Czy może wszystko razem? Bardzo bym prosił o uzasadnienie.
  2. Czy czysty język C++ jest szybszy od C++/CLI? Jeśli nie to czy różnica jest taka sama jak w przypadku C#?
  3. Czy język C++/CLI jest szybszy od C#?
    Z góry dziękuję za odpowiedzi i wyjaśnienia :)
    pozdrawiam
0

c++ jest szybszy od c#. Przeważnie największe znaczenie dla szybkości aplikacji na architektura i użyte algorytmu, na nich należy się przede wszystkim skupić. No i biblioteki np QT jest zdecydowanie cięższe od FLTK.

0

C++ nie ma dynamicznej dewirtualizacji. Jeśli będziesz namiętnie używał słówka virtual, to C++ będzie wolne - sporo wolniejsze na pewno niż Java. No ale w zdecydowanej większości przypadków programiści C++ ograniczają się tylko do statycznego (czyt. ułomnego) polimorfizmu - wtedy C++ ma wysoką prędkość.

0

Nie ma czegoś takiego jak szybkość języka. Jest szybkość programu, która zależy w mniejszym stopniu od języka, w większym od umiejętności programisty.
C++ jest kompilowany do kodu natywnego, natomiast C++/CLI i C# działają na platformie .NET, która np. zajmuje się alokowaniem i dealokowaniem pamięci, co ma wpływ na wydajność aplikacji. Nie zawsze jednak oznacza to, że dobrze napisany program będzie wolniejszy od tego natywnego.

0

w szybkości działania: C++ > Java > C#
z tego co swego czasu zaobserwowałem, różnice sięgają od 5 do ~30%, w większości przypadków są jednak w ogóle niezauważalne...

appy w javie i c# teoretycznie dużo więcej pamięci potrzebują dla samego działania programu... to jest jedyne, co tak sobie zauważam. ale nie jest to tak drastyczne jak to opisują (w takiego minecrafta da się grać mając tylko ~350 mb ramu bez żadnych zwiech)

no, i ze względu na popularność javy i c# w śród wannabe programistów na studiach - pełno jest ludzi, którzy w tym piszą kiepski kod... po prostu trzeba ich omijać jak się da, bo jest i sporo dobrego.

Więcej można zyskać naucząc się pisać dobry kod niż zmieniając język.

0

No dobra, ale zakładając, że moje umiejętności w programowaniu są identyczne jeśli chodzi o C++ i C#, czyli, że napiszę najbardziej optymalnie kod i w C++ i w C# to chyba jednak zawsze wygra C++ - co nie?
No i pozostaje pytanie w którym miejscu odczuję tą prędkość? czy będzie to tylko przy uruchamianiu programu, kompilacji czy może również przy wykonywaniu obliczeń -> np. gdy mam jakąś tablicę z 10^10 zmiennymi double i chciałbym je przemnożyć przez inną tablicę z taką samą ilością zmiennych to czy w takim przypadku rodzaj języka ma znaczenie? Czy C++ szybciej wykona te działania czy może w tym przypadku prędkość będzie taka sama a szybkości należy upatrywać w innym miejscu?

0
newbie ws napisał(a)

No dobra, ale zakładając, że moje umiejętności w programowaniu są identyczne jeśli chodzi o C++ i C#, czyli, że napiszę najbardziej optymalnie kod i w C++ i w C# to chyba jednak zawsze wygra C++ - co nie?

Jeśli będzie to np. algorytm kompresujący danych, to prawdopodobnie tak. Jeśli będzie to spory system bazodanowo-sieciowy z tysiącami obiektów, to raczej nie - bo co innego będzie miało wpływ na wydajność.

No i pozostaje pytanie w którym miejscu odczuję tą prędkość? czy będzie to tylko przy uruchamianiu programu, kompilacji czy może również przy wykonywaniu obliczeń

Kompilacja (kompilatorem) w C++ to chyba jest najwolniejsza właśnie, pierwsze uruchomienie programu w .NET będzie wolniejsze, a co do obliczeń to zależy - przy mało skomplikowanym algorytmie różnicy nie będzie, przy bardziej skomplikowanym może być, a przy aplikacji, która nie jest algorytmiczna różnica w wydajności może się odwrócić na rzecz .NET.
Za to najwolniejsze będzie tworzenie programu w C++, gdzieś tak 4 razy wolniejsze niż w C#.

np. gdy mam jakąś tablicę z 10^10 zmiennymi double i chciałbym je przemnożyć przez inną tablicę z taką samą ilością zmiennych to czy w takim przypadku rodzaj języka ma znaczenie? Czy C++ szybciej wykona te działania czy może w tym przypadku prędkość będzie taka sama a szybkości należy upatrywać w innym miejscu?

W tym konkretnym przypadku nie. No chyba, że użyjesz CUDA, ale nic o tym nie pisałeś, ciągle próbujesz porównywać języki, a nie technologie.

BTW, nie ma czegoś takiego jak "najbardziej optymalnie". Albo coś jest optymalne albo nie.

4

W typowym programowaniu wydajność nie jest najbardziej kluczowym elementem. W końcu czas programisty jest cenniejszy od czasu procesora. Dlatego lepiej otaczać się ekspresywnymi językami. Wtedy szybciej tworzy się oprogramowanie, a sama praca niesie w sobie więcej uciech.

0

Skupię się na wydajności C++/CLI. teoretycznie powinna być na poziomie C#, gdy używamy mechanizmów .Netowych, i na poziomie natywnego C++, gdy po prostu kompilujemy kod standardowego C++ jako C++/CLI.
Niestety, jest pewien problem wydajnościowy z C++/CLI, zwany „double-thunking” - w pewnych wypadkach (funkcje wirtualne, ładowanie funkcji z innych dll-ek napisanych w C++/CLI) może się okazać ZNACZNIE wolniejszy niż C++ natywny i C#. Da się tego uniknąć, ale trzeba wiedzieć jak i kiedy.

0
Azarien napisał(a)

Da się tego uniknąć, ale trzeba wiedzieć jak i kiedy.

Tego akurat można bardzo łatwo uniknąć, wystarczy nie pisać w tej dziwnej protezie.

1

Utarło się, że Java służy głównie do pisania aplikacji biznesowych, jak np Minecraft, C++ służy do pisania aplikacji o wysokiej wydajności jak np oficjalny klient Gadu-Gadu, a Delphi służy do pisania programów intuicyjnych w obsłudze jak np Dev-C++. Prawda jest jednak taka, że generalnie w każdym popularnym języku można stworzyć dowolną rzecz.

Sprawa rozbija się o to, czy dana branża używa danego języka. Jeśli w języku X nikt nie pisze programów dla branży Y, to próba ich pogodzenia ma mało sensu. Będziesz miał zarówno problemy ze znalezieniem dobrej jakości bibliotek jak i potem znalezienia pracy, która by polegała na godzeniu tych dwóch rzeczy (języka X i branży Y).

Jeśli będzie to np. algorytm kompresujący danych, to prawdopodobnie tak.

Akurat tak się składa, że pisuję algorytmy kompresujące. Dla przykładu TarsaLZP: http://mattmahoney.net/dc/text.html#2088 Wersja w Javie nie jest nawet 2x wolniejsza od wersji zoptymalizowanej ręcznie w asemblerze. Trzeba umieć kodzić i znać słabości języków po prostu :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1