Temat: POMOCY - Porównianie technologii wytwarzania...
Ponieważ z Twojego postu wnoszę, że chodzi Ci o kwestie wydajnościowe, poruszę pewne kwestie związane z takimi porównaniami.
Rozumiem, że to bardzo prosta aplikacja, w której użyto dokładnie takich samych mechanizmów np. dostępu do danych (korzystając z - odpowiednio - ODBC i JDBC porównujesz tak naprawdę dodatkowo oba mechanizmy), mechanizmów komunikacji (nawet w ramach samego .NET możesz uzyskać diametralnie różne wyniki jeśli użyjesz WCF i ServiceStack) , bibliotek (przeportowanych z np. .NET do Javy i vice versa)? Inaczej kopletnie stracisz punkt odniesienia. Wystarczy, że w Javie użyto NHibernate, w .NET Entity Framework i już nie porównujesz wyłącznie środowiska .NET z Javą, tylko dodatkowo jeszcze frameworki dostępu do danych. Już nie wspomnę o implementacji sterowników. A takich miejsc będzie cała masa. W obu środowiskach są mechanizmy, które nie sa "wymienne" (np. LINQ, delegaty) i chcąc uzyskać podobny efekt, trzeba stosować właściwe danej platformie "obejścia". Wspomniejmy o bardziej złożonych kwestiach w przypadku porównania całych frameworków i ich wewnętrznych mechanizmów, np. J2EE (EJB + JSF) i ASP.NET (MVC2/3/4 lub WebForms).
W konsekwencji może się okazać, że obie aplikacje działają tak samo szybko i "zasobożernie" jeśli są napisane "pod daną platformę", a może także wychodzić przewaga Javy nad .NET i odwrotnie, ale po zmianie architektury, biblioteki, mechanizmu - uzyskasz już inne wyniki.
Do tego dochodzą także inne kwestie. Np. w .NET jest LINQ, które bardzo ułatwia pisanie zapytań do kolekcji obiektów oraz operacje na zbiorach. Niedawno, w jednym wątku opisywałem algorytm, który napisałem w oparciu o pętlę FOR i miał pewną złożoność obliczeniową. Ktoś zaproponował o wiele bardziej eleganckie, choć jednocześnie mniej elastyczne w oparciu o LINQ. Działało w pewnym zakresie podobnie, wyglądało o wiele bardziej elegancko/czytelnie, ale złożoność obliczeniowa była już inna. Zachowałem podobną (dla uproszczenia - tę samą) funkcjonalność, ale zmienił się algorytm. W Javie trzeba byłoby użyć innych narzędzi. A przecież często o wykorzystaniu danego narzędzia decyduje nie tylko to, jakie jest szybkie (często jest to "bardzo drugorzędna" kwestia), ale także to, jak jest łatwe w użyciu. Załóżmy, że ktoś używa takiego narzędzia, bo pozwala prosto osiągnać efekt, ale jest np. wolniejsze, na czym "cierpi wizerunek" całej aplikacji. Z punktu widzenia użyteczności aplikacji może to być nieistotne, ale w teście liczą się "surowe liczby".
Mrowie takich porównań, prowadzonych od początku powstania .NET wskazuje, że obie platformy, jeśli pisze się "pod nie", pozwalają osiągnąć bardzo zbliżone rezultaty, choć zazwyczaj zupełnie różnymi drogami.
Reasumując - możesz oczywiście porównać dwie aplikacje, co do których wydaje Ci się, że są napisane podobnie, ale wtedy musisz się dokładnie zastanowić co wpłynęło na ewentualne różnice, bo, jak pisałem, być może wystarczy "coś przestawić" i wyniki się znacznie zmienią.
Użyj jakiegoś profilera. Jeśli masz dostęp do kodu i jest on napisany dobrze obiektowo, powinno dać się wrzucić logger czasu wykonania metod lub całych "unit of work".
PS: Jeśli ta sama logika, to po co zależności między klasami i dlaczego miałyby się zmienić?
PS2: zapomniałem o najwazniejszym - a co konkretnie chcesz uzyskać? Co dokładnie badasz? Które środowisko lepiej się nadaje do tworzenia aplikacji?
Ten post został edytowany przez Autora dnia 22.08.13 o godzinie 12:13