Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-09-2012, 11:03   #1
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
[C#] WinForm vs WPF : winform piu veloce?

Ciao a tutti.

Premetto che wpf non lo conosco molto.

Ho fatto lo stesso programma in winform ed in wpf ed ho constatato a mia sorpresa che winform è estremamente piu veloce .

Il programma fa questo:
prendo un file txt con circa 25000 righe in cui sono stati riportati dei dati in una determinata sequenza e devo creare un nuovo file txt con gli stessi dati ma ragruppati in maniera diversa.

LA versione in winform ci impiega qualche secondo la versione wpf quasi un minuto.

Il file viene letto una riga alla volta.

L'algoritmo è il medesimo per entrambi i programmi allora che cosa influisce sulla velocità di wpf?

Con un file da 50000 righe winform non ha nessun problema mentre wpf mi da un messaggio in cui si spiega che l'operazione in esecuzione dura piu di 60 secondi ecc...

qualche consiglio e/o spiegazione?

grazie in anticipo
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2012, 13:40   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da pano1974 Guarda i messaggi
Ho fatto lo stesso programma in winform ed in wpf ed ho constatato a mia sorpresa che winform è estremamente piu veloce .
Contrariamente a quanto molti pensano, WPF NON è il "successore" nè "l'evoluzione" di Windows Forms.

Windows Forms è vivo e vegeto e così sarà per molto tempo ancora.
L'unica vera ragione per cui è necessario WPF sono le applicazioni particolarmente basate sull'interazione di elementi visivi e grafici di svariati tipi di media : animazioni Flash, 3D, incorporamento di documenti, ecc.

Tutto ciò, come è logico aspettarsi, costa in termini di prestazioni.

Per quanto vedo io, molti utenti si buttano a pesce in WPF, pensando erroneamente che sia "meglio" di Windows Forms, e spesso per eseguire task per cui andrebbe benissimo un'Application Console...

Quote:
Originariamente inviato da pano1974 Guarda i messaggi
Il programma fa questo:
prendo un file txt con circa 25000 righe in cui sono stati riportati dei dati in una determinata sequenza e devo creare un nuovo file txt con gli stessi dati ma ragruppati in maniera diversa.

LA versione in winform ci impiega qualche secondo la versione wpf quasi un minuto.

Il file viene letto una riga alla volta.

L'algoritmo è il medesimo per entrambi i programmi allora che cosa influisce sulla velocità di wpf?

Con un file da 50000 righe winform non ha nessun problema mentre wpf mi da un messaggio in cui si spiega che l'operazione in esecuzione dura piu di 60 secondi ecc...
Sinceramente la differenza dei tempi di escuzione che riporti mi sembra eccessiva. Sicuro di leggere quel file in modo appropriato ?
WPF sarà mediamente più lento ma non credo fino a questo punto...

Comunque sia, in Windows Forms, il processo è semplice.
Se ogni riga di quel file rappresenta una "entità" con uno o più "attributi", dovrai creare Oggetti in memoria che mappano tali entità. Una volta ottenuta una List() di tali Oggetti, la potrai ri-ordinare e raggruppare in sotto-Liste a piacere, sfruttando anche gli utilissimi Metodi LINQ.
A quel punto scriverai il tuo file di output...


A mio avviso, prestazioni a parte, per questo e una moltitudine di altri processi, non c'è alcun bisogno di WPF.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2012, 14:04   #3
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
concordo con tutto quello che hai detto a parte il fatto che una gestione di stringhe, anche se molte, non dovrebbe inficiare le prestazioni in wpf.

l'algoritmo è lo stesso e stesse sono le istruzioni sulle stringhe,lunica differenza è che in wpf ho usato un aprocio mvvm per collegare i risultati ai vari richtextbox o textbox usati...mah...soliti misteri di microsoft.

cmq a mio giudizio certe piccolissime applicazioni che costruisci in 10 minuti con winform in wpf ti aumenta il tempo di sviluppo o codice in modo esponenziale.
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2012, 16:30   #4
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Mhhh... Mi sembra molto strano comunque. Una cosa è parlare di prestazioni a livello video (quindi pesantezza e reattività dell'interfaccia), un'altra è parlare di algoritmi di lettura/scrittura su file che nulla hanno a che vedere con la parte grafica e il tutto avviene "dietro le quinte". Se magari posti qualche listato possiamo darti qualche dritta migliore, perchè ora come ora... boh, ripeto mi sembra molto strano.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2012, 10:55   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Mhhh... Mi sembra molto strano comunque. Una cosa è parlare di prestazioni a livello video (quindi pesantezza e reattività dell'interfaccia), un'altra è parlare di algoritmi di lettura/scrittura su file che nulla hanno a che vedere con la parte grafica e il tutto avviene "dietro le quinte". Se magari posti qualche listato possiamo darti qualche dritta migliore, perchè ora come ora... boh, ripeto mi sembra molto strano.
Già, concordo.
Anch'io ho espresso il sospetto, soprattutto adesso che l'OP ha messo lì questa frase :
"in wpf ho usato un aprocio mvvm per collegare i risultati ai vari richtextbox o textbox usati"

"collegare i risultati ai vari richtextbox o textbox usati" è molto probabilmente alla base dei problemi di lentezza riscontrati.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 13:39   #6
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Già, concordo.
Anch'io ho espresso il sospetto, soprattutto adesso che l'OP ha messo lì questa frase :
"in wpf ho usato un aprocio mvvm per collegare i risultati ai vari richtextbox o textbox usati"

"collegare i risultati ai vari richtextbox o textbox usati" è molto probabilmente alla base dei problemi di lentezza riscontrati.
anch'io pensavo fosse un problema di refresh dei textbox di verifica ma a questi vengono collegati i risultati solo alla fine delle varie operazioni ulle stringhe.

cmq l'algoritmo usato (moolto bruteforce) è il seguente:
Codice HTML:
public void CaricaFile()
        {
            string data_appoggio = "";
            string nuova_riga = "";
            string nuovo_testo = "";
            string str;
            string descrizioni = "";
            string descrizioni_appoggio = "";
            string um = "data ";
            string um_appoggio = "data ";
            int count = 0;
            Campione camp = new Campione();
            clsOrigine o = new clsOrigine();

            string fileOriginale;
            Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
            dialog.ShowDialog();
            fileOriginale = dialog.FileName;

            if (fileOriginale != "")
            {
                string testo = "";
                int cont = 0;

                System.IO.StreamReader file = new System.IO.StreamReader(@fileOriginale);
                while ((str = file.ReadLine()) != null)
                {
                    testo += str + "\n";
                    camp.riga = str;
                    NumRigheTesto = count++;
                    if (str == "\n" || str == "")
                    {
                        data_appoggio = "";
                        if (nuova_riga != "")
                        {
                            descrizioni = descrizioni_appoggio + "\n";
                            um = um_appoggio + "\n";
                            nuovo_testo += nuova_riga + "\n";
                            descrizioni_appoggio = "";
                            um_appoggio = "data ";
                            cont++; 
                        }
                    }
                    else
                    {
                        camp.riga = str;
                        if (data_appoggio == "")
                        {
                            data_appoggio = camp.Data;
                            nuova_riga = data_appoggio;
                        }
                        descrizioni_appoggio += " | " + camp.Descrizione;
                        um_appoggio += " | " + camp.UM;
                        nuova_riga += " | " + camp.Valore;
                    }



                }
                file.Close();



                this.NumRigheTestoModificato = cont;
                o.TestoModificato = descrizioni + um + nuovo_testo;
                o.Testo = testo;
                Origine = o;
            }
        }
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 14:01   #7
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Hai provato ad utilizzare uno StringBuilder per costruire le tue stringhe ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 15:11   #8
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Hai provato ad utilizzare uno StringBuilder per costruire le tue stringhe ?
ci avevo pensato (appena ho 2 minuti ci provo) ma la domanda rimane sempre la stessa:

stesso file,stesso algoritmo, winform vince nettamente in velocità!!!

ho provato anche a spostare l'algoritmo dal modelview al model ma nisba...stesso risultato.
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 18:43   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da pano1974 Guarda i messaggi
anch'io pensavo fosse un problema di refresh dei textbox di verifica ma a questi vengono collegati i risultati solo alla fine delle varie operazioni ulle stringhe.

cmq l'algoritmo usato (moolto bruteforce) è il seguente:
...
Questo dipende.
Tu esegui una lettura del file riga-per-riga.
Questi "refresh" sulla UI vengono ripetuti per ogni riga letta ?

Io ho solo dato uno sguardo superficiale al tuo codice, e vado parzialmente OT, grafica a parte, per concentrare l'attenzione solo sulla lettura, perchè ho come la sensazione che, rispetto a quanto avevi dichiarato di dover fare in apertura, ci sia troppo codice.

Il tuo scopo iniziale dichiarato è :
"Il programma fa questo:
prendo un file txt con circa 25000 righe in cui sono stati riportati dei dati in una determinata sequenza e devo creare un nuovo file txt con gli stessi dati ma ragruppati in maniera diversa.
"

Quello che non è chiaro è lo scopo di refreshare controlli UI in un processo che, spiegato così, può ( e deve ) essere esseguito senza coinvolgere controlli di sorta.

Se riesci a fare un esempio concreto e preciso di come è il file di testo in input e di come deve essere quello in output, ti si può rispondere in modo più specifico.

Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Hai provato ad utilizzare uno StringBuilder per costruire le tue stringhe ?
Quoto. E' sempre un'ottima alternativa al creare/concatenare in continuazione nuovi Oggetti String in memoria, soprattutto nelle operazioni cicliche che cinvolgono decine di migliaia di stringhe o più.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 19:34   #10
tacchinox
Member
 
Iscritto dal: Sep 2008
Messaggi: 237
Non è che hai qualche INotifyPropertyChanged nelle properties ?
Perche' se tiri 25.000 eventi nel thread della UI per avere 25.000 refresh di textboxes, non mi stupirei che fosse lento.
Se proprio metti l'algoritmo in un altro thread.

Ultima modifica di tacchinox : 17-09-2012 alle 19:37.
tacchinox è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 19:47   #11
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
Questo è parte del file originale:
Codice HTML:
30/08/12 15:18:00 , Portata_in_uscita , 67,4 , m3/h
30/08/12 15:18:00 , Ammoniaca_in_ingresso , 8,5 , mg/l
30/08/12 15:18:00 , Solidi_sospesi_in_ingresso , 1250,7 , mg/l
30/08/12 15:18:00 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:18:00 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:18:00 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:18:00 , Ammoniaca_linea_1 , 2,6 , mg/l
30/08/12 15:18:00 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:18:00 , Assorbimento_soffiante_1_linea_1 , 25,3 , A
30/08/12 15:18:00 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:18:00 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:18:00 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:18:00 , Ossigeno_linea_2 , 0,7 , mg/l
30/08/12 15:18:00 , Ammoniaca_linea_2 , 1,6 , mg/l
30/08/12 15:18:00 , Solidi_sospesi_linea_2 , 5,2 , kg/m3
30/08/12 15:18:00 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:18:00 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:18:00 , Solidi_sospesi_ricircolo_linea_2 , 4,59 , kg/m3
30/08/12 15:18:00 , Portata_supero_linea_2 , -0,1 , m3/h

30/08/12 15:19:06 , Portata_in_uscita , 65,59 , m3/h
30/08/12 15:19:06 , Ammoniaca_in_ingresso , 8,6 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_in_ingresso , 1210,59 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:19:06 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:19:06 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:19:06 , Ammoniaca_linea_1 , 2,7 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:19:06 , Assorbimento_soffiante_1_linea_1 , 25,2 , A
30/08/12 15:19:06 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:19:06 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:19:06 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:19:06 , Ossigeno_linea_2 , 0,7 , mg/l
30/08/12 15:19:06 , Ammoniaca_linea_2 , 1,6 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_linea_2 , 5,09 , kg/m3
30/08/12 15:19:06 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:19:06 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:19:06 , Solidi_sospesi_ricircolo_linea_2 , 4,59 , kg/m3
30/08/12 15:19:06 , Portata_supero_linea_2 , -0,1 , m3/h

30/08/12 15:19:06 , Portata_in_uscita , 65,59 , m3/h
30/08/12 15:19:06 , Ammoniaca_in_ingresso , 8,6 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_in_ingresso , 1210,59 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:19:06 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:19:06 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:19:06 , Ammoniaca_linea_1 , 2,7 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:19:06 , Assorbimento_soffiante_1_linea_1 , 25,2 , A
30/08/12 15:19:06 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:19:06 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:19:06 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:19:06 , Ossigeno_linea_2 , 0,7 , mg/l
30/08/12 15:19:06 , Ammoniaca_linea_2 , 1,6 , mg/l
30/08/12 15:19:06 , Solidi_sospesi_linea_2 , 5,09 , kg/m3
30/08/12 15:19:06 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:19:06 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:19:06 , Solidi_sospesi_ricircolo_linea_2 , 4,59 , kg/m3
30/08/12 15:19:06 , Portata_supero_linea_2 , -0,1 , m3/h

30/08/12 15:20:07 , Portata_in_uscita , 68,9 , m3/h
30/08/12 15:20:07 , Ammoniaca_in_ingresso , 8,5 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_in_ingresso , 1213,8 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:20:07 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:20:07 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:20:07 , Ammoniaca_linea_1 , 2,7 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:20:07 , Assorbimento_soffiante_1_linea_1 , 25,2 , A
30/08/12 15:20:07 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:20:07 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:20:07 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:20:07 , Ossigeno_linea_2 , 0,7 , mg/l
30/08/12 15:20:07 , Ammoniaca_linea_2 , 1,5 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_linea_2 , 5,0 , kg/m3
30/08/12 15:20:07 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:20:07 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:20:07 , Solidi_sospesi_ricircolo_linea_2 , 4,59 , kg/m3
30/08/12 15:20:07 , Portata_supero_linea_2 , -0,1 , m3/h

30/08/12 15:20:07 , Portata_in_uscita , 68,9 , m3/h
30/08/12 15:20:07 , Ammoniaca_in_ingresso , 8,5 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_in_ingresso , 1213,8 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:20:07 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:20:07 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:20:07 , Ammoniaca_linea_1 , 2,7 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:20:07 , Assorbimento_soffiante_1_linea_1 , 25,2 , A
30/08/12 15:20:07 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:20:07 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:20:07 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:20:07 , Ossigeno_linea_2 , 0,7 , mg/l
30/08/12 15:20:07 , Ammoniaca_linea_2 , 1,5 , mg/l
30/08/12 15:20:07 , Solidi_sospesi_linea_2 , 5,0 , kg/m3
30/08/12 15:20:07 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:20:07 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:20:07 , Solidi_sospesi_ricircolo_linea_2 , 4,59 , kg/m3
30/08/12 15:20:07 , Portata_supero_linea_2 , -0,1 , m3/h

30/08/12 15:21:13 , Portata_in_uscita , 77,2 , m3/h
30/08/12 15:21:13 , Ammoniaca_in_ingresso , 8,69 , mg/l
30/08/12 15:21:13 , Solidi_sospesi_in_ingresso , 1224,09 , mg/l
30/08/12 15:21:13 , Solidi_sospesi_ispessitore , 0,0 , kg/m3
30/08/12 15:21:13 , Portata_fango_da_disidratare , -2,5 , n/a
30/08/12 15:21:13 , Ossingeno_linea_1 , 0,2 , mg/l
30/08/12 15:21:13 , Ammoniaca_linea_1 , 2,6 , mg/l
30/08/12 15:21:13 , Solidi_sospesi_linea_1 , 3,9 , kg/m3
30/08/12 15:21:13 , Assorbimento_soffiante_1_linea_1 , 25,2 , A
30/08/12 15:21:13 , Assorbimento_soffiante_2_linea_1 , 0,0 , A
30/08/12 15:21:13 , Solidi_sospesi_ricircolo_linea_1 , 7,6 , kg/m3
30/08/12 15:21:13 , Portata_supero_linea_1 , 0,0 , m3/h
30/08/12 15:21:13 , Ossigeno_linea_2 , 0,8 , mg/l
30/08/12 15:21:13 , Ammoniaca_linea_2 , 1,5 , mg/l
30/08/12 15:21:13 , Solidi_sospesi_linea_2 , 5,0 , kg/m3
30/08/12 15:21:13 , Assorbimento_soffiante_1_linea_2 , 0,0 , A
30/08/12 15:21:13 , Assorbimento_soffiante_2_linea_2 , 21,6 , A
30/08/12 15:21:13 , Solidi_sospesi_ricircolo_linea_2 , 4,7 , kg/m3
30/08/12 15:21:13 , Portata_supero_linea_2 , -0,1 , m3/h
mentre questo è il risultato:

Codice HTML:
 | Portata_in_uscita | Ammoniaca_in_ingresso | Solidi_sospesi_in_ingresso | Solidi_sospesi_ispessitore | Portata_fango_da_disidratare | Ossingeno_linea_1 | Ammoniaca_linea_1 | Solidi_sospesi_linea_1 | Assorbimento_soffiante_1_linea_1 | Assorbimento_soffiante_2_linea_1 | Solidi_sospesi_ricircolo_linea_1 | Portata_supero_linea_1 | Ossigeno_linea_2 | Ammoniaca_linea_2 | Solidi_sospesi_linea_2 | Assorbimento_soffiante_1_linea_2 | Assorbimento_soffiante_2_linea_2 | Solidi_sospesi_ricircolo_linea_2 | Portata_supero_linea_2
data  | m3/h | mg/l | mg/l | kg/m3 | n/a | mg/l | mg/l | kg/m3 | A | A | kg/m3 | m3/h | mg/l | mg/l | kg/m3 | A | A | kg/m3 | m3/h
30/08/12 15:18:00 | 67,4 | 8,5 | 1250,7 | 0,0 | -2,5 | 0,2 | 2,6 | 3,9 | 25,3 | 0,0 | 7,6 | 0,0 | 0,7 | 1,6 | 5,2 | 0,0 | 21,6 | 4,59 | -0,1
30/08/12 15:19:06 | 65,59 | 8,6 | 1210,59 | 0,0 | -2,5 | 0,2 | 2,7 | 3,9 | 25,2 | 0,0 | 7,6 | 0,0 | 0,7 | 1,6 | 5,09 | 0,0 | 21,6 | 4,59 | -0,1
30/08/12 15:19:06 | 65,59 | 8,6 | 1210,59 | 0,0 | -2,5 | 0,2 | 2,7 | 3,9 | 25,2 | 0,0 | 7,6 | 0,0 | 0,7 | 1,6 | 5,09 | 0,0 | 21,6 | 4,59 | -0,1
30/08/12 15:20:07 | 68,9 | 8,5 | 1213,8 | 0,0 | -2,5 | 0,2 | 2,7 | 3,9 | 25,2 | 0,0 | 7,6 | 0,0 | 0,7 | 1,5 | 5,0 | 0,0 | 21,6 | 4,59 | -0,1
30/08/12 15:20:07 | 68,9 | 8,5 | 1213,8 | 0,0 | -2,5 | 0,2 | 2,7 | 3,9 | 25,2 | 0,0 | 7,6 | 0,0 | 0,7 | 1,5 | 5,0 | 0,0 | 21,6 | 4,59 | -0,1
la visualizzazione del file di origine e del file modificato su due textbox avvengono solo dopo che sono state fatte tutte le elaborazioni dell'algoritmo, sia in winfoem che in wpf.
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 17-09-2012, 23:40   #12
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
ad occhio stai facendo due errori:

1) mischi un po' troppo logica ed UI
2) sei sceso troppo a basso livello dimenticando LINQ

Qui ho tirato giù due linee per vedere come si fa facile con LINQ

Se il file è molto grosso ma le colonne sono fisse, invece di buttare tutto in una DataTable, puoi usare un buffer in cui butti una riga per volta e che l'UI mette a video non appena trova (in questo caso l'utilizzo del framework RX è una manna)
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 00:37   #13
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
ad occhio stai facendo due errori:

1) mischi un po' troppo logica ed UI
2) sei sceso troppo a basso livello dimenticando LINQ

Qui ho tirato giù due linee per vedere come si fa facile con LINQ

Se il file è molto grosso ma le colonne sono fisse, invece di buttare tutto in una DataTable, puoi usare un buffer in cui butti una riga per volta e che l'UI mette a video non appena trova (in questo caso l'utilizzo del framework RX è una manna)
Linq mi capita di utilizzarlo spesso, ma mai per query molto pesanti.
A livello di efficienza sai a che livello è rispetto a del codice home-made dedicato e ben scritto? (ovviamente sulla semplicità e rapidità di utilizzo del primo rispetto al secondo siamo su altri pianeti).
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 13:31   #14
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
potrei anche togliere la visualizzazione dei file, non è questo il risultato ma bensì il nuovo file di testo.

ribadisco che la visualizzazione avviene SOLO dopo l'elaborazione del file quindi penso che non sia un problema di visualizzazione in wpf (però potrei sbagliarmi visto le mie forti lacune in wpf).

Ora proverò a rifare il programma in wpf senza mvvm che non sia il pattern magari a rompere le scatole
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 14:27   #15
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Linq mi capita di utilizzarlo spesso, ma mai per query molto pesanti.
A livello di efficienza sai a che livello è rispetto a del codice home-made dedicato e ben scritto? (ovviamente sulla semplicità e rapidità di utilizzo del primo rispetto al secondo siamo su altri pianeti).
diciamo che é possibile scrivere codice efficiente con LINQ (naturalmente stiamo parlando specificatamente del provider Linq 2 Objects), l'importante é sapere esattamente quali sono gli operatori che causano lo "svolgimento" dell'enumerazione e far sí che ció accada solo quando lo si vuole, perché lo si vuole.

Ad esempio nel codice di prima, c'é una grossa inefficienza dovuta all'uso dell'operatore Distinct() ma che puó essere rimossa a patto di scrivere a mano i nomi delle colonne (cosa che non avevo voglia ieri sera ).

Importante é tenere d'occhio operatori come OrderBy() e GroupBy() perché, fedeli alla filosofica funzionale, non modificano mai il dato originale creando nuove collection contenitrici.

Esistono esempi di codice di operatori riscritti in modo da aumentare le loro performance attraverso la modifica dell collection originale.

Infine, LINQ é il modo piú semplice di integrare dati eterogenei da sorgenti eterogenee senza escludere la possibilitá di passare al processo parallelo attraverso PLINQ ed alla programmazione reattiva attraverso RX.

TL;DR: si, chi scrive a mano un metodo puó essere piú efficiente, ma piuttosto io spenderei tempo a (ri)scrivere i singoli metodi di LINQ per poi riutilizzarli altrove.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 19:32   #16
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da pano1974 Guarda i messaggi
potrei anche togliere la visualizzazione dei file, non è questo il risultato ma bensì il nuovo file di testo.

ribadisco che la visualizzazione avviene SOLO dopo l'elaborazione del file quindi penso che non sia un problema di visualizzazione in wpf (però potrei sbagliarmi visto le mie forti lacune in wpf).

Ora proverò a rifare il programma in wpf senza mvvm che non sia il pattern magari a rompere le scatole
Secondo me una prova del 9 è prenderti quegli algoritmi, crearti sia in wpf che in windows form una schermata vuota con un semplice campo di testo al centro ed un pulsante per far partire la selezione e l'analisi del file. Alla fine del processo di lettura e computazione dei risultati stampi a schermo sul campo di testo un messaggio a tuo piacimento (non so, un "fatto", "OK", "Dai Cazzo!" o quel che ti pare ). Così la parte grafica è ridotta all'osso e anche di più e non metti in mezzo le librerie grafiche. In una situazione del genere non vedo come l'applicazione wpf possa essere più lenta di quella winform e puoi avere così la riprova
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 19:34   #17
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
diciamo che é possibile scrivere codice efficiente con LINQ (naturalmente stiamo parlando specificatamente del provider Linq 2 Objects), l'importante é sapere esattamente quali sono gli operatori che causano lo "svolgimento" dell'enumerazione e far sí che ció accada solo quando lo si vuole, perché lo si vuole.

Ad esempio nel codice di prima, c'é una grossa inefficienza dovuta all'uso dell'operatore Distinct() ma che puó essere rimossa a patto di scrivere a mano i nomi delle colonne (cosa che non avevo voglia ieri sera ).

Importante é tenere d'occhio operatori come OrderBy() e GroupBy() perché, fedeli alla filosofica funzionale, non modificano mai il dato originale creando nuove collection contenitrici.

Esistono esempi di codice di operatori riscritti in modo da aumentare le loro performance attraverso la modifica dell collection originale.

Infine, LINQ é il modo piú semplice di integrare dati eterogenei da sorgenti eterogenee senza escludere la possibilitá di passare al processo parallelo attraverso PLINQ ed alla programmazione reattiva attraverso RX.

TL;DR: si, chi scrive a mano un metodo puó essere piú efficiente, ma piuttosto io spenderei tempo a (ri)scrivere i singoli metodi di LINQ per poi riutilizzarli altrove.
Grazie mille della delucidazione...

P.S: so che il discorso andrebbe circoscritto all'applicazione ma, in generale, da appassionato sia di c++ che di java (ma soprattutto del primo), beh, C# è il mondo dei balocchi. E' un piacere programmarvi ed infatti non uso altro da praticamente un anno e mezzo.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2012, 19:51   #18
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Vi chiedo scusa (in particolar modo all'autore del 3d) ... ma a proposito di velocità in merito a LinQ, potreste darmi una mano nel mio 3d (databinding->datagridview) ??

E' una cosa che non faccio mai ... ma mi si sta davvero attanagliando lo stomaco ....
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 09:19   #19
pano1974
Member
 
L'Avatar di pano1974
 
Iscritto dal: Aug 2001
Messaggi: 158
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Secondo me una prova del 9 è prenderti quegli algoritmi, crearti sia in wpf che in windows form una schermata vuota con un semplice campo di testo al centro ed un pulsante per far partire la selezione e l'analisi del file. Alla fine del processo di lettura e computazione dei risultati stampi a schermo sul campo di testo un messaggio a tuo piacimento (non so, un "fatto", "OK", "Dai Cazzo!" o quel che ti pare ). Così la parte grafica è ridotta all'osso e anche di più e non metti in mezzo le librerie grafiche. In una situazione del genere non vedo come l'applicazione wpf possa essere più lenta di quella winform e puoi avere così la riprova
volevo provare oggi a farlo.
Ho provato a rifare l'algoritmo usando stringbuilder invece di usare delle comuni string (già una volta in un programma simile avevo incrementato di vari ordini di grandezza la velocità)...ma anche così wpf è lentissimo, poi ora che il file da analizzare è diventato di circa 120000 riga.

P.S.
per chi consiglia linq vorrei aggiungere che i dati memorizzati nel datalogger (il file da trattare è generato da un datalogger) possono aumentare ma mai diminuire.

posterò oggi il codice di entrambe le versioni così potrete vedere che cosa succede, per il file da analizzare non so dove postarlo
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH.
pano1974 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 10:02   #20
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da pano1974 Guarda i messaggi
volevo provare oggi a farlo.
Ho provato a rifare l'algoritmo usando stringbuilder invece di usare delle comuni string (già una volta in un programma simile avevo incrementato di vari ordini di grandezza la velocità)...ma anche così wpf è lentissimo, poi ora che il file da analizzare è diventato di circa 120000 riga.

P.S.
per chi consiglia linq vorrei aggiungere che i dati memorizzati nel datalogger (il file da trattare è generato da un datalogger) possono aumentare ma mai diminuire.

posterò oggi il codice di entrambe le versioni così potrete vedere che cosa succede, per il file da analizzare non so dove postarlo
dai un'occhiata ad RX. ( http://msdn.microsoft.com/en-us/data/gg577609.aspx )

non ho visto se é possibile leggere il file mentre qualcun altro ci scrive, ma prendere i dati non appena vengono scritti e processarli non sarebbe male

prendi quest'esempio ( http://stackoverflow.com/questions/1...ive-extensions ) dove in pratica processa il dato non appena viene letto dal file
Kralizek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
6 robot al prezzo del Black Friday e non...
Russia, i cani randagi diventano hotspot...
Ogni giorno sconti nuovi: oggi iPhone 17...
Non solo Mac: anche alcuni futuri iPhone...
La costruzione del telescopio spaziale N...
HBO ha cancellato la produzione della se...
OpenAI ha pensato a una partnership (o a...
Starlink Mobile: SpaceX potrebbe lanciar...
Volkswagen trasforma lo stabilimento di ...
Meta AI più reattivo e imparziale...
In Cina la prima GPU discreta al mondo c...
Vertiv CoolCenter, il sistema di raffred...
Konecta entra nel Kraken BPO Partner Pro...
Un dialogo con l'AI sposta voti meglio d...
iPhone 17 al minimo storico: oggi il 256...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:40.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v