Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Profiler w Netbeans

Jest wolna chwila, jest i wpis na blogu – tym razem o wydajności programów, a raczej o sprawdzaniu wydajności programów w środowisku Netbeans. Służy do tego Profiler, który dostarcza nam wielu cennych informacji o tworzonej przez nas aplikacji.

Ale co mamy sprawdzić? W tym przypadku możemy sprawdzić głównie wydajność programów pod względem zużycia pamięci, monitorowanie stanu wątków, wydajność procesora oraz możemy znaleźć „wąskie gardła”. Ja zwracam bardziej uwagę na możliwość monitorowania wątków i zużycie pamięci niż na wydajność procesora, ponieważ w tym przypadku wyniki są często (zawsze) bardzo przekłamane. Ale nie ma co się dziwić, ponieważ środowisko też potrzebuje czasu procesora na zebranie informacji o stanie pamięci, wątkach, załadowanych obiektach i klasach.

Do czego służy Profiler? Do poprawy naszej aplikacji, aby była wydajniejsza, doskonalsza, lepsza – tworząc programy/systemy należy dążyć do doskonałości chociaż już na starcie wiadomo, że jej nie osiągniemy. Dzięki temu narzędziu możemy się dowiedzieć jak wykonują się nasze wątki, ile czasu się wykonują, spędzają w trybie monitora lub są uśpione. Otrzymamy również informacje o ilości instancji obiektów poszczególnych klas oraz o tym ile pamięci zużywa nasza aplikacja. Większość informacji otrzymamy w formie wykresu lub tabelki. Wszystko ładnie, przejrzyście i zrozumiale.

Niestety nie poprawi za nas aplikacji. Może i to lepiej... więcej pracy dla programistów i projektantów(Ci też powinni być przy „profilowaniu” aplikacji).

Hmm co jeszcze... Może to, że tworząc program w Netbeans`ie możemy wyznaczać miejsca, w których chcemy uzyskać szczegółowych informacji o stanie pamięci i programie tj. sprawdzić ilość obiektów poszczególnych instancji itp. . Uruchamiając Profiler możemy określić co nas interesuje i jakie informacje mają być zbierane podczas wykonania tego procesu.

Dla zaawansowanych użytkowników Netbeansa istnieje możliwość uruchamiania aplikacji na innym komputerze co skutkuje szybszym wykonywanie procesu i zalecane jest dla dużych systemów z wiadomych przyczyn.

Tradycyjnie już skromny przykład

Zaczniemy od stworzenia wielowątkowej aplikacji- w tym wypadku aplikacja serwera. W tym celu otwieramy Netbensa, tworzymy nowy projekt. Nasza aplikacja będzie się składała z trzech klas: główna klasa z metodą "main", klasa będąca wątkiem serwera oraz klasa wątków obsługujących klientów.

Mój projekt wygląda mniej więcej tak, jak na obrazku poniżej.

Na początek kod wątku obsługi klienta ”ClientThread.java”.

package profilertest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author michal */ public class ClientThread extends Thread{ final private Vector clients; private Socket s; private static int id=0; public ClientThread(Socket s, Vector c){ super("ClientThread"+id); id++; this.s=s; this.clients=c; } @Override public void run() { BufferedReader reader = null; BufferedWriter writer = null; try { reader = new BufferedReader(new InputStreamReader(s.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line = reader.readLine(); writer.write(line + "\r\n"); writer.flush(); synchronized (clients) { clients.remove(this); } } catch (IOException ex) { Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, null, ex); } finally { try { reader.close(); writer.close(); this.finalize(); } catch (IOException ex) { Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, null, ex); } catch (Throwable ex) { Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, null, ex); } } } }

Jak widać nic skomplikowanego klasa ta nie robi, ot po prostu odbiera napis od klienta i odsyła go, a na końcu usuwa obiekt z listy.

Poniżej przedstawiony został kod klasy ServerThread. Również za dużo się nie dzieje w tej klasie. Zwyczajnie akceptowane jest połączenie od klienta, tworzony wątek obsługi klienta i dodanie go do listy.

package profilertest; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author michal */ public class ServerThread extends Thread { ServerSocket s; final int port = 16969; final Vector<ClientThread> clients = new Vector<ClientThread>(); public ServerThread() { super("ServerThread"); } @Override public void run() { try { System.out.println("Serwer wystartował"); s = new ServerSocket(port); // tworzymy nowe gniazdo serwera while (true) { Socket s1 = s.accept(); //akceptujemy nowe połączenie ClientThread ct1 = new ClientThread(s1, clients); //tworzymy wątek klienta synchronized(clients){ clients.add(ct1); //dodajemy klienta do wektora } ct1.start(); //uruchamiamy wątek obsługi klienta System.out.println("Dodałem klietna"); } } catch (IOException ex) { Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex); System.exit(-1); } } }

Główna klasa z metodą „main” wygląda następująco:

package profilertest; public class ProfilerTest { public static void main(String[] args) { ServerThread server = new ServerThread(); server.start(); } }

Chyba najdłuższa klasa w moim życiu :P
Jak już mamy stworzony projekt serwera, to trzeba coś zrobić, aby przetestować nasz serwer i pokazać jak się sprawdza wydajność aplikacji w Netbeansie.
Do tego tworzymy nowy projekt, z jedną klasa z metodą main. Kod został przedstawiony poniżej.

package profilerclient; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author michal */ public class ProfilerClient { /** * @param args the command line arguments */ public static void main(String[] args) { Vector<Thread> v = new Vector<Thread>(); for(int i=0; i<100; i++){ Thread t1 = new Thread("Client: "+i){//tworzymy nowy wątek public void run(){ BufferedReader reader = null; BufferedWriter writer = null; try { Socket s = new Socket("localhost",16969);//łączymy się z serwerem writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); reader = new BufferedReader(new InputStreamReader(s.getInputStream())); writer.write(getName()+"\r\n");//wysyłamy nazwę wątku writer.flush(); System.out.println(reader.readLine());//wypisujemy odebrany napis reader.close(); writer.close(); } catch (UnknownHostException ex) { Logger.getLogger(ProfilerClient.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(ProfilerClient.class.getName()).log(Level.SEVERE, null, ex); } }//koniec metody run }; v.add(t1); }//koniec pętli for for(int i=0; i<100; i++){ v.elementAt(i).start();//startujemy wątek i-ty } } }

Po skończeniu pracy z kodem powinniśmy otrzymać coś takiego lub podobnego jak na zrzucie poniżej.

Ok. Więc kod programu mamy już gotowy. Co teraz należy zrobić? Rozpocząć proces profilowania.
Warto przed tym dokonać kalibracji środowiska JDK. W tym celu należy wybrać z menu „Profile” ->”Advanced Commands”-> „Run Profiler Calibration”, wybrać wersję JDK, którą używamy.

Następnie zaznaczamy nasz projekt jako główny(PPM, z menu kontekstowego wybieramy „Set as Main Project”) i z menu wybieramy „Profile” -> „Profile Main Project”. Powinno otworzyć się okno konfiguracyjne, w którym zaznaczamy interesujące opcje. Ja zrobiłem to tak, jak na zrzutach poniżej.

Przyszedł czas na uruchomienie przyciskiem „Run”. Po tym kroku po prawej stronie powinna pokazać się zakładka „Profiler”. Jeżeli z jakiegoś powodu nie pokazała się, można ją włączyć w menu „Windows”-> „Profiling”->”Profiler Control Panel”.

W panelu tym możemy zarządzać procesem sprawdzania aplikacji serwera, włączyć monitorowanie wątków, zużycie pamięci, pobierać „zrzuty pamięci” etc. . Zostało to przedstawione na rysunkach poniżej.

Trzeba pamiętać, że sprawdzając aplikację serwera trzeba uruchomić aplikację klienta. Na wykresie przebiegu wątków widać jak tworzone i uruchamiane były wątki obsługi klienta.

Jak zostało to pokazane można wiele się dowiedzieć z wykresów i tabel o wykonywaniu naszego programu. Ale to nie wszystko...

Podczas wykonywania programu tym sposobem możemy pobierać zrzuty pamięci przyciskiem „Take Snapshot” lub obserwować wyniki na żywo (jak ktoś potrafi szybko analizować :P).
Dodatkowo możemy w programie ustawić miejsca w których ma się wykonać „snapshot”.

Jak to zrobić? Przechodzimy do kodu programu, klikamy prawym klawiszem myszy i z menu kontekstowego wybieramy „Profiling”->„Insert Profiling Point”. Pokaże się okno dodawania, w którym ustawiamy wszystkie parametry i kończymy dodając miejsce zrzutu. W jednej linijce możemy dodać 2 miejsca – przed wykonaniem instrukcji/metody i po wykonaniu. Wykorzystuję to do sprawdzania dużych metod, które długo się wykonują.

Następnie podczas wykonania procesu profilowania w oknie „Profiling Points” (jeżeli nie jest ono widoczne, należy je włączyć w menu: „Windows” -> „Profiling” -> „Profiling Points”), zostanie pokazany nasz punkt i przechwycony zrzut. Można go otworzyć klikająć PPM i wybierając opcję „Show Report”.

Trochę długi wpis wyszedł ze względu na zamieszczony kod programów oraz zrzuty ekranów.
Dla osób szerzej zainteresowanych polecam strony:http://netbeans.org/features/java/profiler.htmlhttp://profiler.netbeans.org/http://netbeans.org/kb/docs/java/profiler-intro.htmlDziękuję za uwagę ;) 

oprogramowanie programowanie inne

Komentarze

0 nowych
patryk9200   8 #1 10.02.2012 23:13

Ciekawy wpis, chociaż sam jestem raczej negatywnie nastawiony do Javy właśnie ze względu na niską wydajność, wolę C# ;-). Może istnieje do niego podobne narzędzie? :)

revcorey   6 #2 10.02.2012 23:20

[quote] Javy właśnie ze względu na niską wydajność, wolę C#[/quote]
Jedno ale java i C# mają podobną wydajność.....

patryk9200   8 #3 10.02.2012 23:27

O tu się mylisz ;-) C# co prawda nie ma szybkości kodu natywnego, ale jest bez porównania wydajniejszy od Javy. Sprawdzone doświadczalnie.

jullo89   3 #4 10.02.2012 23:47

Nie chce sie zbytnio wdawac w wojnę o to, ktory jezyk jest wydajnieszy, ale warto aby zanim cos sie powie zapoznać sie szerzej z tematem... i należy pod wzglad wziąć różne platformy... webowe, desktopowe i mobilne.

revcorey   6 #5 10.02.2012 23:55

@patryk9200
Interfejs może reagować szybciej, chociaż nie koniecznie bo kiepska wydajność jak pamiętam WPF była powodem przesunięcia wydania visual studio 2010. Tu i tu maszyna wirtualna. Powiem tyle nie piszę w c#, w javie rzadko już ale przeglądałem testy(chociaż to wiadomo syntetyki). Java na windows jest trochę wolniejsza od C# z kolei na linuksie wydjanościowo odpowiada C#. Oczywiście możesz zrobić wpis na blogu. Zrobić parę testów. np. przetwarzanie dokumentu xml, jakieś powiedzmy tworzenie wielu obiektów(żeby dużo pamięci zająć) i jakieś operacje na nich, 2D. Proponował bym to zrobić tak java se 7 vs .Net C# na windows i openjre 7 vs mono na linuksie żeby mieć pełen obraz.

revcorey   6 #6 10.02.2012 23:58

@jullo89 ależ mówimy tu w domyśle nasz zwyczajny PC, czyli java standard edition.

Druedain   13 #7 11.02.2012 01:32

Doświadczalnie to ja widziałem z 10 testów i każdy wskazywał na innego zwycięzcę. Może pochwal się swoimi badaniami, a nie na ślepo każ nam Tobie wierzyć…

Dzięki, za ciekawy tekst. Możliwe, że się prędzej czy później przyda :)

jullo89   3 #8 11.02.2012 08:19

A ja bym proponował zrobic testy dla java ee i .net przy użyciu C#. Różnice widać juz przy niewielkim projekcie.

jullo89   3 #9 11.02.2012 08:21

Poza tym odeszlismy od tematu wpisu ;p

patryk9200   8 #10 11.02.2012 11:06

@jullo89- tak różnicę widać, ale zostańmy przy wpisie, bardziej mnie interesuje, czy jest podobne rozwiązanie dla platformy .NET. Chętnie bym test wydajności obu języków wykonał, jednak Java nie należy do moich zainteresowań, tak więc i programować to specjalnie w nim nie potrafię ;-). Swoje doświadczenia opisuję na prawie identycznym projekcie stworzonym jeden w Java a drugi w C#. Chociaż faktycznie, może to też zależeć od umiejętności programisty.

Frankfurterium   9 #11 11.02.2012 13:12

Google -> C# profiler -> wiadomości z ostatniego roku na Code Guru i Stack Overflow. Większość polecanych to dosyć drogi soft (często ma okres trialowy z pełną albo dużą funkcjonalnością) , ale jest też kilka darmowych.

matzu   5 #12 11.02.2012 14:03

@patryk9200
Daleko szukać nie musisz. Profiler umieszczony jest w wersjach Ultimate i Premium VS.

BTW skoro już poruszyłeś temat wydajności Java i .NET, to teraz pytanie czy podejmiesz się wyzwania i przygotujesz kilka testów :)

Frankfurterium   9 #13 11.02.2012 23:18

Do tego istnieją jeszcze IronPython i Jython. Piszesz w Pythonie, uruchamiasz na CLR albo JVM.

Ale to już chyba temat na całkiem inny wpis :P

jullo89   3 #14 12.02.2012 09:05

jezeli mamy porównywać same środowiska uruchomieniowe to jvm wygra... zainteresujcie się Scala... taki język obiektowy.

iluzion   5 #15 12.02.2012 10:40

Scala łączy cechy języków funkcyjnych i obiektowych. O tej funkcyjnej stronie raczej nie można zapominać, bo to istotna część tego języka.

A PyPy rozwija się bardzo dynamicznie. W piątek ukazała się wersja 1.8: http://morepypy.blogspot.com/2012/02/pypy-18-business-as-usual.html

"performance improved roughly 10% on average since the previous release" -- as usual

jullo89   3 #16 12.02.2012 10:43

Po za tym jeżeli ktoś jako wybór stawia C# ze względu na szybkość działania (nie programowania), to chyba niezbyt udany wybór, bo lepszym wyborem byłby C/C++.
W C# programuje się szybciej a jest to głównie zasługa LINQ.

jullo89   3 #17 12.02.2012 10:47

I tak dyskusja zeszła na inny temat ;) na swoim blogu staram się przedstawiać sprawy związane z wytwarzaniem oprogramowania, głównie w Javie. Co prawda za dużo nie napisałem, ale mam nadzieję, że wraz z czasem ilość wpisów będzie rosnąć...

Airborn   8 #18 12.02.2012 10:56

O nie znałem Profile Pointsów dzięki, na pewno się przyda :)

Z ciekawych rzeczy, których nie pokazałeś wymienił bym jeszcze licznik wywołań poszczególnych metod (wraz z łącznym czasem wykonywania). Przydatna rzecz gdy chcemy porównać np. dwie implementacje jakich obliczeń.

revcorey   6 #19 12.02.2012 11:33

Ogólnie o samym netbeans powiem że wolę w nim pisać w javie niż w eclipse z kolei wolę pisać w c/c++ w Eclipse niż w netbeans takie zboczenie :D Chociaż eclipse ma + taki że jest do niego wtyczka dla mikroprocków avr a do netbenas nie ma.

Airborn   8 #20 12.02.2012 11:41

@revcorey ale nie ma problemu by podpiąć toolchain AVRowy, czy innej rodziny mikrokontrolerów (testowałem również z MSP430) do Netbeansa.

revcorey   6 #21 12.02.2012 11:57

Jak wyżej wspomniałem zboczenie jakieś i po prostu przyzwyczajenie. I moim zdaniem eclipse jest trochę szybszy niż najnowsze wersje netbeans.

patryk9200   8 #22 12.02.2012 12:50

@jullo89 C# właśnie wybrałem ze względu na szybkość pisania kodu oraz bardzo dobry soft i IDE do niego od MS. Rozwiązania typu NetBeans, Eclipse i podobne nie przypadły mi do gustu, również ich wydajność jest niższa niż Visual Studio. Ale co kto lubi. Testy wykonał bym z przyjemnością, jednak jak już wyżej napisałem, Java nie należy do moich zainteresowań, przez co i w niej nie programuję. Nawet jesli bym spróbował, to bał bym się o jakość takiego kodu. W C# mógł bym rozwiązań niektóre zadania lepiej ze względu tego, że go znam natomist javę nie.

Druedain   13 #23 12.02.2012 13:15

Ja z ciekawości Eclipse sobie tydzień temu zainstalowałem. Z jednej strony to środowisko wymaga więcej czasu na konfigurację, możliwości tej konfiguracji pozwala lepiej dopasować środowisko pod siebie i jeszcze ilość dostępnych wtyczek jest ogromna (trudno jednak określić jaka jest ich jakość).

Java za niedługo może stać się swoistym Asemblerem JVM, a w praktyce będzie się wykorzystywać np. Scalę, która już teraz w kolejnych mniejszych i większych projektach jest wykorzystywana (Twitter http://www.artima.com/scalazine/articles/twitter_on_scala.html , nowa wersja angielskich stron rządowych).

A teraz pytanie do ludzi od Windy: Czy kod w C# można kompilować do natywnego kodu platformy, a nie nie na bajtkod .Neta / Mono? Wiecie, tak jak da się skompilować do normalnej binarki kod w Pythonie, albo Javie.

revcorey   6 #24 12.02.2012 13:26

@patryk9200. Ostatnim viusual studio które trochę więcej używałem było vs 2008 c++. "Czystą" wersję 2010 miałem krótko i powiem tak. Większej różnicy w szybkości działania między eclipse a vs nie widzę, co więcej na windows mam obecnie AVR Studio 5 oparty o vs studio 2010. I tylko mogę powiedzieć że nie znaczniej szybciej od eclipse się uruchamia to tyle szybkościowo sobie odpowiadają.
Po za tym eclipse jest podstawą dla większości środowisk dla procków ARM.

  #25 12.02.2012 13:33

@Druedain poczytaj o narzędziu Native Image Generator (ngen.exe)

matzu   5 #26 12.02.2012 13:52

@patryk9200
Cóż, myślałem, że podejmiesz się zadania. Czyli Twój pierwszy post w tym temacie nie był poparty żadnym doświadczeniem?

@Druedain
"Czy kod w C# można kompilować do natywnego kodu platformy, a nie nie na bajtkod .Neta / Mono?"
Jest taka możliwość: http://msdn.microsoft.com/en-us/library/6t9t5wcf%28v=vs.100%29.aspx . BTW język pośredni (CIL) używany w .NET i Mono jest identyczny. To nie są jakieś dwa osobne twory.

djfoxer   17 #27 12.02.2012 15:27

@RaveStar
"przyszłości C# nie wróżę świetlanej." - dałeś popis znajomości tematu :P Platforma .NET rozwija się szybko i nie ma tu mowy o jakimś (śmiech na sali) przestoju.

revcorey   6 #28 12.02.2012 15:43

"Platforma .NET rozwija się szybko i nie ma tu mowy o jakimś (śmiech na sali) przestoju."
Rozwijać się to się rozwija tylko chyba nie dużo rynku już jest wstanie wyrwać. Zagarnęła spory kawałek i się miejsce skończyło już. Sam .NET pewnie nadal się będzie rozwijał dynamicznie. A brak wersji na linuksa powoduje też problemy z wyparciem JavyEE.

jullo89   3 #29 12.02.2012 15:51

C# ma swoją przyszłość właśnie ze względu na szybkość i łatwość tworzenia aplikacji, jednak tam gdzie zachodzi potrzeba wydajności lub użycia innych systemów niż MS to stosuje się inne rozwiązania. W obecnych czasach taniej jest kupić nowy serwer niż płacić za godziny pracy programistów...

revcorey   6 #30 12.02.2012 16:00

" W obecnych czasach taniej jest kupić nowy serwer niż płacić za godziny pracy programistów."
Ostatnio czytałem narzekania programisty jak przepisywali oprogramowanie w .net/javie na c++ bo było zbyt wolno. Także zasłanianie się tą wymianą serwerów to grząski grunt.

matzu   5 #31 12.02.2012 16:15

@revcorey
"Ostatnio czytałem narzekania programisty jak przepisywali oprogramowanie w .net/javie na c++ bo było zbyt wolno."
Warto zawsze w takiej sytuacji podać link do źródła (z góry dziękuję). Poza tym zapewne zdajesz sobie sprawę z tego, że wydajność aplikacji nie zależy tylko i wyłącznie od użytej technologii, ale także od jakości kodu (a ta jakość kodu zależy w głównej mierze od doświadczenia zespołu).

jullo89   3 #32 12.02.2012 16:43

@revcorey
Chyba raczej nie było to oprogramowanie serwerowe lub programy równoległe. Jak ktoś źle zaprojektuje lub wykona to i współczesna technologia nie podoła ;] No i źródło też by się przydało, bo ciekawi mnie to przepisywanie z Javy/.Net do C++

revcorey   6 #33 12.02.2012 17:10

to był gość na jakimś forum także linka nie będzie :P .NET się przykładowo nie sprawdził w obsłudze giełdy. Ja rozumiem szybkość tworzenia aplikacji i jak najbardziej nie jestem przeciw takim platformom, ale widzę że takie podejście "a przepiszmy wszystko na jvm/.net będzie awesome" to błąd, przykładowo c++ + qt4 to bardzo dobry wybór. Po za tym w javie/c# napisać coś może każdy i to sprzyja "klepaczom" a fakt ofert pracy java/.net sporo tylko że większość to właśnie dla klepaczy za 2000 zł.

EnterBioS   2 #34 12.02.2012 17:50

Nie wiem jakie maja doświadczenie osoby tutaj piszące. Osobiście mam VS 2010 Ultimate, w którym pisałem w c++/c#. Od pół roku pisze w javie w eclipse i po tym czasie już chyba nigdy nie odpalę VS. Wystarczy trochę wprawy i opanowania eclipse'a a kod zaczyna wręcz sam pojawiać się na ekranie. Jeśli chodzi o łatwość i komfort pisania kodu to java bije na głowę zarówno cpp jak i c#. Różnica wydajności o jakiej tutaj jest rozprawa tak naprawdę nie ma znaczenia w przypadku aplikacji użytkowych. Większość wydajności zależy od zastosowanych algorytmów i umiejętnego rozwiązania problemu. Jeśli problem jest złożony obliczeniowo to od razu się projektuje system rozproszony nie martwiąc się o milisekundy jakie straci jvm.

matzu   5 #35 12.02.2012 18:04

@revcorey
"to był gość na jakimś forum także linka nie będzie :P"
aha ...

".NET się przykładowo nie sprawdził w obsłudze giełdy"
O tym słyszałem, ale niestety tylko słyszałem. Wszystkie informacje, które udało mi się na ten temat znaleźć były dość zdawkowe. Ten system (TradElect) powstał zapewne przy użyciu .NET 2.0 i MS SQL Server 2000 (zgaduję biorąc pod uwagę datę wdrożenia i okres projektowania takiego systemu). Dlaczego zamiast dokonać aktualizacji systemu zdecydowali się od razu przejść na nową technologię? Tego już niestety nie wiem. Zapewne chodziło tutaj przede wszystkim o pieniądze :)

"ale widzę że takie podejście "a przepiszmy wszystko na jvm/.net będzie awesome" to błąd, przykładowo c++ + qt4 to bardzo dobry wybór"
Ja osobiście nie spotkałem się z podejściem, gdzie dobrze działającą aplikację, ktoś przepisuje od zera w nowej technologii. Widocznie wszystko jeszcze przede mną.

"Po za tym w javie/c# napisać coś może każdy i to sprzyja "klepaczom" a fakt ofert pracy java/.net sporo tylko że większość to właśnie dla klepaczy za 2000 zł"
aha ...

revcorey   6 #36 12.02.2012 18:27

"Ja osobiście nie spotkałem się z podejściem, gdzie dobrze działającą aplikację, ktoś przepisuje od zera w nowej technologii. Widocznie wszystko jeszcze przede mną. "
może mnie poniosło z tym przepisywaniem ale wiesz o co mi chodzi :P Autodesk zaczął mocno iść w .NET z autocadem i co z tego wyszło każdy widzi.
Nie mówię że java/.net to zło, sam pisałem prosta aplikację która zbiera pomiary z takich urządzeń pomiarowych(opartych o atmege) i użyłem javy + jfreechart. Stwierdziłem że to wyjdzie najlepiej i najszybciej.

Co do tego systemu też dotarłem do takich ogólników, czyli zbyt długi czas odpowiedzi systemu i wymiana o system oparty na linuksie a aplikacja w c++.

alucosoftware   7 #37 12.02.2012 18:40

@jullo89
Gratuluję wpisu, dla niezaznajomionych jest to ciekawy wstęp do tematu optymalizacji.

Jeżeli zaś chodzi o powstałą - jak zwykle - burzę językową... "Wydajności" aplikacji nie można określić wyłącznie na podstawie wykorzystywanych narzędzi programistycznych. Java nie jest lepsza od .NET'a, .NET nie jest lepszy od Javy. Każde narzędzie ma swoje zastosowanie. Ponadto platformy programistyczne to nie są jakieś stałe twory i podlegają nieustannej modyfikacji. Z drugiej strony, czy wyłącznie "wydajność" programów jest miarą porządnie wykonanego oprogramowania?

Panowie... aż się prosi o wpis "Jak w prosty sposób pozbyć się wydajności w aplikacjach ".
Może jutro skrobnę coś poglądowego na temat .NET'u. Pozostałych zachęcam do podobnej twórczości i przemyśleń.

revcorey   6 #38 12.02.2012 18:55

Ja tylko C ale może się pokuszę o wpis na podstawie AVR Efficent coding in C. Zobaczymy

jullo89   3 #39 12.02.2012 19:50

Ja na samym starcie tej burzy chciałem uniknąć, bo także uważam, że nie ma to sensu. Każda z wymienionych technologii znajduje swoje zastosowanie. I już to podkreśliłem, że każda technologia, język ma swoje wady i zalety.

Problem leży w ludzkiej przekorze i niedowartościowaniu, bo chyba to kieruje ludzi do wpierania ludziom i wmawiania, że coś jest lepsze lub gorsze. Tylko, że niektórzy wielcy programiści wiedzą najlepiej co jest dla nich i dla innych najlepsze i będą pisać w .Net statyczny kod strony :P, a drudzy od podstaw będą pisać serwer i aplikacje webowe w C albo asemblerze, bo to będzie najefektywniejsze ;]

Jakby ktoś nie wiedział użyłem WYOLBRZYMIENIA.

Wyrażam skromną prośbę: Nie kłóćmy się o to, która platforma/język jest najlepszy, bo tego sporu nigdy nie rozstrzygniemy.

Druedain   13 #40 13.02.2012 00:14

@djfoxer Ale zaraz, zaraz. .Net i C# nie można używać zamiennie. C# to obecnie jeden z wielu języków wspieranych przez tę maszynkę, tak jak z Javą na JRE. Twórca Javy na pytanie na co by teraz postawił, bez zastanowienia wskazuje Scalę, a trzeba pamiętać, że nie tylko Scala jest źródłem zainteresowania. Ponad to trwają prace na wprowadzeniem Scali do .Neta. Tak więc C# i .Net rozwijają się niezależnie i ani wzrost, ani spadek popularności używania C# nie oznacza, że tak samo jest z .Netem. Gdyby np. Scala stawała się coraz popularniejsza to kosztem Javy (i być może C#), ale równocześnie mogłoby to oznaczać dalszy wzrost zainteresowania samymi maszynkami wirtualnymi.

matzu   5 #41 13.02.2012 02:06

@Druedain
Nie powinno się używać zamiennie - to prawda. Myślę jednak, że jak ktoś jest w temacie, to świetnie sobie zdaje sprawę z zastosowanego uproszczenia (akurat w przypadku komentarza RaveStar nie mam pewności, czy mówiąc o C# miał na myśli .NET jako platformę, czy sam język, ale biorąc pod uwagę fakt, że wróżył przyszłość, to średnio mnie to interesuje :P ). Mi osobiście takie uproszczenie nie przeszkadza, a przynajmniej wtedy, gdy mowa jest o C# lub VB.NET.

BTW jak chcę sprawdzić jakie języki wspiera .NET, to odwiedzam tą stronę http://www.dotnetlanguages.net/DNL/Resources.aspx . Może Cię zainteresować.

djfoxer   17 #42 13.02.2012 08:08

@Druedain
Trochę się zagalopowałeś ;) .NET bez C# nie mógłby istnieć :) Tak naprawdę C# to podwalina dla większości podtechnologi .NET. Zarówno w ASP (+głębiej MVC), WPF, Silverlight, WinForms, WP7, wszędzie klepiesz w C# (ewentualnie VB.NET, jak matzu wspomniał). Jako programista .NET, C# jest codziennością dnia, bez względu co bym nie robił.

VB.NET trochę jakby był na drugim planie (patrz kolejność wypuszczenia SDK WP7 dla C# i VB.NET), aczkolwiek nadal się trzyma ;)

Druedain   13 #43 13.02.2012 13:27

Dzięki, sprawdzę. Ale muszę Ci zwrócić uwagę na dwie rzeczy:
– zdań nie zaczyna się od Mi, tylko Mnie (analogicznie nie Ci, tylko Tobie, itp.),
– jak jest stronę to powinno być tę, a nie tą.

A to wyróżnianie może nabierać coraz większego znaczenia, bo nawet jeśli żaden język nie wejdzie na miejsce C# zbyt szybko, to jest to raczej nieuniknione, a wtedy .Net może się prężnie dalej rozwijać, a C# tylko mieć wprowadzane funkcje obsługi nowych możliwości .Neta. Ja sam nie wykorzystuję tych technologii, ale sytuacja jest analogiczna do Javy, która jest trochę starszym językiem, przez co ma więcej archaizmów i więcej trzeba czasem napisać by ten sam efekt osiągnąć, więc już teraz Scala zaczyna się popularyzować (równolegle z całym ekosystemem: IDE, czyli wtyczka do Eclipsa, społeczność, dokumentacja, być może nawet podręczniki). Kiedy JRE jest uznawane za bardzo dojrzały projekt, sam język rozwija się raczej mozolnie.

alucosoftware   7 #44 13.02.2012 15:40

Język programowania, jak sama nazwa wskazuje, jest tylko zbiorem słów kluczowych i kontekstów w jakich słowa te występują. Przywiązanie do konkretnego języka, wysławianie jednego ponad inne, jest samo w sobie pułapką (w dłuższej perspektywie czasu).

Ale to tylko taki mały off topic.

djfoxer   17 #45 13.02.2012 18:04

@Druedain
Dlaczego inny język miałby wejść za C#? :) Raz, że nie widać powodu jego odejścia, dwa, że nie ma on konkurencji we frameworku .NET :)

@alucosoftware
Dokładnie jest jak piszesz, ale czemu odmawiać sobie przyjemności pogawędki? ;) To raczej miła przyjacielska dyskusja :)

revcorey   6 #47 13.02.2012 18:36

@djfoxer
ale żeś tendencyjnie poleciał z tym .net
http://www.indeed.com/jobtrends?q=c%23%2C+java%2C+Python%2C+C%2B%2B&l=

revcorey   6 #48 13.02.2012 18:37

BTW. jescze dopiszę że jak np. pythona zmienisz na javascript to więcej niż c#,

djfoxer   17 #49 13.02.2012 20:00

@revcorey
Ten link co podałeś to właśnie RaveStar wrzucił. Jest on równie tendencyjny jak mój. Dlaczego? :) Java to cały framework, podobnie jak .NET. Jeśli ktoś szuka web developera w .net to daje ofertę o pracy z wymogiem ASP.NET (czy precyzuje np. MVC), a nie C# web czy coś tam, itp. itd. Więc sam rozumiesz, dałem kontrprzykład na link RevStara, o tyle :)

Trafnie podałeś przykład z js, to ja dorzucę (zupełnie abstrakcyjnie): SQL :P

Druedain   13 #50 14.02.2012 00:33

@djfoxer A czemu nie? Świat idzie do przodu.

Druedain   13 #53 14.02.2012 13:42

Znam to i zdania nie zmieniam.

  #54 14.02.2012 16:14

Ludzie dajcie spokój z tym porównywaniem technologii - każda ma jakieś zalety i jakieś wady

Bardzo dobry artykuł pozdrawiam !