Jaka technologia do małego programu.

0

Witajcie.
Piszę na forum ponieważ nie mam oglądu na języki programowania, a potrzebuję porady osób, które się na tym znają.

Mam do napisania program, który ma wspomaga pracę audytora. W założeniu jego działanie sprowadza się do wyświetlania pytań kontrolnych i przyjmowaniu odpowiedzi (tak, nie, potrzebny komentarz, nie dotyczy) na owe pytania, a następnie generowanie raportu (w formie tekstowej albo graficznej)
Z założenia program powinien być łatwy w przenoszeniu, jednak tylko o obrębie platformy windowsowej, a pytania kontrolne mogą być dodawane, modyfikowane, usuwane.

Z początku myślałem o J2EE wykorzystując JDBC, no ale niedawno zrodziło mi się pytanie: jak to przenosić? Czy na każdym kompie będę musiał instalować JDBC? Czy nie było by może lepiej zapisywać te dane do pliku? A może C# daje jakieś możliwości?

Nie znam wad i zalet poszczególnych języków i technologii, dlatego zwracam się o pomoc. Jeśli znajdzie się osoba, która chciała by mi coś doradzić to będę bardzo wdzięczny.

Pozdrawiam
Darek

0

Scala ma wbudowaną obsługę XML, jeśli baza jest mała (do kilku mega informacji) to spokojnie możesz trzymać dane w XML.

0

A może C# daje jakieś możliwości?
Daje wiele możliwości, podobnie jak inne środowiska.
Ostatecznie przecież wszystko jedno, w czym napiszesz.

0

Masz rację oczywiście. Ale na coś trzeba się zdecydować :)
A wykorzystanie XML wydaje się być dobrym pomysłem.

0
PewienDarek napisał(a)

A wykorzystanie XML wydaje się być dobrym pomysłem.
Jeśli już mowa o .Net, to do wyboru masz „zwykłe” API do XML (siermiężne, bo oparte o DOM), XML Serializer (szybkie i łatwe pod warunkiem że nie zależy ci na ładnym XML), oraz LINQ To XML (polecam).

0

Scala pozwala jednak na dużo bardziej zwięzły kod niż w C#, a sam LINQ spokojnie mógłby zostać zaimplementowany jako DSL.

0

Jesli aplikacje BD to nie ma nic lepszego od Delphi. Baza to zalezy, jakies sa bazy plikowe, albo MySQL.

0

Nie ma nic lepszego niż Delphi... o ile zapomni się o C# czy Javie.

0

moze zrobimy test ?

u mnie w Delphi: MyDAC + MySQL + QueryPerformanceCounter.
Przetworzenie np 1mln razy jakichs danych. Moge przeslac backup mysqla zeby analogicznie ktos zrobil test na C#.

ktos podejmie wyzwanie ?

0

Dziękuję za porady.

Napisałem, że zastanawiam się nad bazą danych, bo nie wpadłem na pomysł XMLa, no bo nie ma sensu robić bazy na 40 rekordów. Jeśli chodzi o wygląd to nie ma najmniejszego znaczenia, to i tak ma analizować automat.

Dziękuję Wam bardzo za pomoc

0
delphiarz napisał(a)

moze zrobimy test ?

u mnie w Delphi: MyDAC + MySQL + QueryPerformanceCounter.
Przetworzenie np 1mln razy jakichs danych. Moge przeslac backup mysqla zeby analogicznie ktos zrobil test na C#.

ktos podejmie wyzwanie ?

Ja podejmę, ale Delphi vs C lub Delphi vs C++.

0

OK.

I. Jest sobie schemat TEST, jakaś tabela a w niej 1 pole typu Double, 1 o wartości: 8567.9143.
II. Co jest przedmiotem testu to widać na poniższym kodzie: parametry bazy, łączenie, a w pętli pobieranie danych i zamykanie Query. Na końcu disconnect bazy oraz wywołanie zegara.

procedure TForm1.btnTestClick(Sender: TObject);
var
  I: Integer;
  Temp: Double;

  Freq, TimeStart, TimeEnd : Int64;
begin

  QueryPerformanceFrequency(Freq);
  QueryPerformanceCounter(TimeStart);

  MyConn.Username := 'root';
  MyConn.Database := 'TEST';
  MyConn.Password := 'xxxx';
  MyConn.Server := 'localhost';
  MyConn.Connect;

  Query.Connection := MyConn;

  for I:=1 to 50000 do
  begin


    Query.SQL.Text := 'SELECT TEST FROM Test';
    Query.Open;
    Temp := Query.Fields[0].AsFloat;
    Query.Close;

    Temp := Temp * 12345.993;
    Temp := Temp / 461.71;

  end;

  MyConn.Disconnect;
  QueryPerformanceCounter(TimeEnd);
  ShowMessage( 'Wykonanie zajelo: '+
        FloatToStr((TimeEnd-TimeStart)/Freq*1000)+ ' ms');

end;

user image
user image

0

@maciejmt : jakiej wersji delphi i jakiego sprzętu użyłeś?

0

D2009, MySQL 5.1.39
Laptopowy Core Duo 1,86 GHz , 3GB Ram, XP

0

Ale benchmark wymyśliliście, nie ma co :)
Nawet jeśli będzie różnica 5x na niekorzyść C# to co? W realu nie pobiera się jednego rekordu z jednej tabelki w pętli 50000 razy. Nawet 5-krotna różnica w tym benchmarku nie przełoży się na więcej niż kilka % różnicy w realnej aplikacji.

Z drugiej strony pokaż mi w Delphi coś takiego jak LINQ albo Squeryl, to pogadamy. Delphi może już w tej dziedzinie zwijać manatki.

0

Kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <mysql/mysql.h>

int main() {
	MYSQL* conn;
	MYSQL_RES* result;
	MYSQL_ROW row;
	long start = clock(), end = 0;
	int i = 0;
	const char req[] = "SELECT * FROM test";
	double temp = 0.0, res = 0.0;
	conn = mysql_init(NULL);
	if(conn == NULL) {
		fprintf(stderr, "Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
		exit(1);
	}
	if(!mysql_real_connect(conn, NULL, "root", "16marzec", "test", 0, NULL, 0)) {
		fprintf(stderr, "Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
		exit(1);
	}

	for(i = 0; i < 50000; i++) {
		mysql_real_query(conn, req, strlen(req));
		result = mysql_store_result(conn);
		while((row = mysql_fetch_row(result))) {
			temp = atof(row[0]);
			temp = temp * 12345.993;
			temp = temp / 461.71;
		}
	}

	end = clock();
	res = (end - start) * 1000.0 / CLOCKS_PER_SEC;
	printf("%f ms\n", res);
	mysql_close(conn);
	return 0;
}

Najlepszy wynik jaki uzyskałem:
2240.000000 ms
Najgorsze nie przekraczały
3000.000000 ms

Konfiguracja:
GCC 4.6.0 (nightly)
Ubuntu 10.04 (Linux 2.6.32-23-generic #37-Ubuntu SMP Fri Jun 11 0758 UTC 2010 i686 GNU/Linux)
Centrino Duo
1.5 GB RAM

0

noo ładnie i szybko ;-P
Czy to wina delphi, czy wina providera, ale faktem jest że zdeklasowałeś mój przykład ;-)
Ale chciałbym jeszcze zobaczyć to w VS C#, ale jak się w sumie użyje z DLLki MySQLa, to wynik pewnie podobny bedzie.

0

Kod:

using System;
using MySql.Data.MySqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            MySqlConnection con = new MySql.Data.MySqlClient.MySqlConnection("Server=localhost;User id=root;database=test");
            DateTime start = DateTime.Now;
            try
            {
                con.Open();
            }
            catch (Exception e)
            {
                Console.Out.WriteLine("Error {0}", e.ToString());
                return;
            }
            double temp = 0;
            MySqlCommand cmd = new MySqlCommand("Select * from `test`", con);
            for (int i = 0; i < 50000; i++)
            {
                MySqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    temp = reader.GetDouble(0);
                    temp = temp * 12345.993;
                    temp = temp / 461.71;
                }
                reader.Close();
            }
            Console.Out.WriteLine("{0} ms", (DateTime.Now - start).TotalMilliseconds);


            con.Close();
            Console.In.ReadToEnd();

        }
    }
}

Najlepszy wynik jaki uzyskałem:
6670,388 ms
Najgorsze nie przekraczały
7491,4285 ms

Konfiguracja:
Visual Studio 2010 x64
Windows 7 Professional x64
Quad Core
4 GB RAM (Używane w czasie testów 3067)

0

Jak Wy chcecie porównać kody, skoro testujecie je na różnych maszynach? ;>

0

Pomiar czasu powinien być rozpoczęty przed wszelkimi instrukcjami związanymi z zadaniem

0

@somekind - nasze kody są na wszystkie komy z Winzgrozą (co prawda mój pisany na GNU, ale na Windzie też pójdzie). Oprócz tego tak patrząc to moja konfiguracja z podanych jest najbardziej marna ze wszystkich :D

0

Najważniejsza jest dużo większa czytelniejszość kodu Delphi niż innych języków, dzięki temu nie powstaje tyle błędów czyli szybciej robi się aplikację.

0

rasert, kpisz? Delphi czytelne? Na pewno mniej niż C# czy Python. Wiem, że to kwestia gustu, ale Pascale są generalnie uznawane za 'najczytelniejsze' jedynie przez ludzi nie mających doświadczenia z innymi językami.

0
rasert napisał(a)

Najważniejsza jest dużo większa czytelniejszość kodu Delphi niż innych języków, dzięki temu nie powstaje tyle błędów czyli szybciej robi się aplikację.

O tak, a te begin end i then to juz w ogole zajebiscie dodają czytelności. Kpisz czy o drogę pytasz.

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