Article View: pl.comp.lang.java
Article #154038Re: Prędkość Java kontra C#
From: Arivald
Date: Mon, 14 Jul 2014 07:15
Date: Mon, 14 Jul 2014 07:15
57 lines
3412 bytes
3412 bytes
On 2014-07-14 00:43, Borneq wrote: > W dniu 2014-07-14 00:40, Borneq pisze: >> Czy mi się zdaje, że program w Javie jest dużo szybciej wykonywany niż w >> C#? Tu pełne zaskoczenie. Kod w Javie szybszy był od Delphi, mimo że był >> bardziej skomplikowany. Natomiast kod w C# to to samo co w Javie a dużo >> wolniej. > > Czy C# miałby kompilację debug i release ? Java nie ma, w np. w C++ jest > ogromna różnica prędkości. W C++ ta ogromna różnica prędkości nie płynie z istnienia bądź nie informacji do debugowania w kodzie. Różnica płynie z włączonych optymalizacji kodu. A generalnie nie włącza się optymalizacji przy debugowaniu, ponieważ po ich włączeniu spora cześć kodu przestaje istnieć, inne partie są za to powtarzane wielokrotnie (aka "loop unwinding"). Szczególnego kopa dają metody "inline", czyli takie metody których ciała kompilator wstawia w miejscach wywołań, zamiast wywołań. Po typowych kilkunastu poziomach inlineowania, kod STLa zupełnie nie przypomina źródła ;-) Na tej optymalizacji opiera się wiele technik użytych w STLu, np traity, alokatory, czy klasy-tagi. Java też ma tryb debugowania, ale AFAIK prawie nikt nie używa. Np. "assert" działa jak Delphiowe Assert(), i tak samo jego wykonanie można wyłączyć w trakcie kompilacji. Inną metoda na "dubug-only code" w Javie, już popularnie używaną, jest takie konstruowanie wyrażeń, że w określonych warunkach część kodu nie jest kompilowana. Typowe zastosowanie: wyłączenie logowania. Po pierwsze, gdzieś deklarujesz zmienną "final static boolean DEBUG = true" (nazwa dowolna) i potem w kodzie if (DEBUG) Log.l(....); I teraz jak przestawisz DEBUG na false, to kompilator zauważy że "Log.l(....)" się nigdy nie wykona, i go nie wkompiluje. Także narzędzia do budowania potrafią tu pomóc. Np Gradle pozwala na różne "buildType", z czego domyślnie są dwa, "debug" i "release". A "buildType" ma wpływ na wiele rzeczy, między innymi można automatycznie zmieniać część kodu źródłowego, np zmieniać DEBUG = true w buildzie "debug", i DEBUG = false w buildzie "release". A C#, dlaczego dużo wolniejszy? Stawiam raczej że coś źle skonfigurowałeś. Albo dany kod, algorytm, akurat nie pasuje do języka, zmuszając go do nieoptymalnego zachowania. -- Arivald
Technical Details
Message-ID:
<lq002d$3i7$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@node2.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.java Subject: Re: Prędkość Java kontra C# Date: Mon, 14 Jul 2014 09:15:30 +0200 Organization: Dialog Net Lines: 60 Message-ID: <lq002d$3i7$1@news.dialog.net.pl> References: <lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@node2.news.atman.pl> NNTP-Posting-Host: dynamic-78-8-97-109.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1405322125 3655 78.8.97.109 (14 Jul 2014 07:15:25 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Mon, 14 Jul 2014 07:15:25 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0 In-Reply-To: <lpv236$363$2@node2.news.atman.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit