Performance... Xojo vs VB6

  1. 6 months ago
    Edited 6 months ago

    Buongiorno a tutti,

    Mi presento, sono un vecchio (il tempo scorre veloce) sviluppatore e il linguaggio con cui ho sempre lavorato è il VB6, e nel caso di super prestazioni preferisco integrare con il buon vecchio C.
    Come tutti, negli ultimi 25 anni sia per necessità che per passione, ne ho visti (e provati) di linguaggi, dialetti, IDE, RAD ecc ecc. Con alcuni ho fatto qualche lavoro, con altri ho perso solo del tempo... le mode passano ma i clienti hanno bisogno di soluzioni stabili e durature....
    Inutile dire che in azienda abbiamo centinaia di migliaia di righe di codice VB6 in attivo, che ci hanno dato (e ancora danno) grandi soddisfazioni, a noi e ai nostri clienti.
    Conoscevo RB e la sua storia anche se non l'ho mai usato, ed era da qualche anno che mi ripromettevo di testarlo per valutare la possibilità di utilizzarlo sia nei nuovi progetti che nel porting dei miei principali applicativi.
    Girando sul Web non ho trovato nessuna tabella o applicazione di esempio che confrontasse le prestazioni dei due compilatori (VB6 e RB... anzi Xojo), così un pò per curiosità, un pò per esercizio, un pò per prendere la mano, ho scritto qualche riga di codice che voglio condividere. Potrebbe capitare che faccia comodo a qualche altro neofita come me ;).

    Per mantenere il codice confrontabile, oltre l'uso di tipi Long, non ho applicato nessuna ottimizzazione spinta sul codice VB6 (per Xojo non credo di esserne ancora capace, anzi se qualche veterano trova qualche ottimizzazione da applicare è ovviamente benvenuto..)

    Vista la mancanza dell'oggetto Array in VB6, ho usato anche per Xojo dei normali vettori, tutti i tempi sono espressi in secondi.

    ------------------------------------------------------------------------------------------------------------
    						|  VB6		|  Xojo 32	|  Xojo 64	|
    ------------------------------------------------------------------------------------------------------------
    Riempimento di vettore con 3000 numeri interi	|   0.01321	|   0.012026	|   0.006525	|
    Riordino del vettore con Bublesort		|   2.245812	|  16.61888	|   9.018532	|
    Riordino del vettore con Mergesort		|   0.028688	|   0.041791	|   0.020041	|
    (Solo Xojo) uso del metodo Array.sort		|    ---	|   0.015008	|   0.001890 	|
    Riempimento di due colonne ListBox		|   0.301999	|   0.026987	|   0.020228	|
    ------------------------------------------------------------------------------------------------------------
    Riempimento di vettore con 3000 stringhe casuali|   0.171875	|   0.105026	|   0.054691	|
    Riordino del vettore con Bublesort		| 125.6914	| 155.5215 	|  94.43404	|
    Riordino del vettore con Mergesort		|   0.1875	|   0.136116	|   0.073802	|
    (Solo Xojo) uso del metodo Array.sort		|    ---	|   0.050611	|   0.347832	|
    Riempimento di due colonne ListBox		|   0.265625	|   0.030731	|   0.017094	|
    ------------------------------------------------------------------------------------------------------------
    Creazione di una stringa da 638000 word		|   		|		|   		|
      (accodamento progressivo stringa da 319crt)   |   5.288344	|   2.379218	|   2.406868	|
    Split della stringa in un vettore		|   1.030594	|   0.065178	|   0.070917	|
    Join del vettore in una stringa			|   0.031844	|   0.023851	|   0.024207	|
    Replace di caratteri 				|   0.126844	|   0.001321	|   0.001413	|
    Creazione di una stringa da 30000 word		|   		|		|   		|
      (accodamento progressivo di singole word) 	|   0.591687	|   0.132891	|   0.140901	|
    Riempimento di TextBox multiriga con 30000 word	| 159.170563	|  18.157072	|  11.237082	|
    ------------------------------------------------------------------------------------------------------------
    Grafico Mandelbrot:     Calcolo			|   2.61481	|   7.23671	|   1.44987	|
    			Disegno			|   0.27869	|   0.008241	|   0.003810	|
    ------------------------------------------------------------------------------------------------------------
    Ricerca numeri primi da 0 a 10000000		|   0.08256	|   0.200393	|   0.143445	|
    Riempimento ComboBox con 664579 numeri 		|  17.05638	|  12.51993	|  13.22566	|
    ------------------------------------------------------------------------------------------------------------
    Scrittura in un File di 21.610.000 word      	|   0.24249	|   0.06136	|   0.05446	|
    Lettura da un File di 21.610.000 word      	|   0.23131	|   0.07056	|   0.05618	|
    ------------------------------------------------------------------------------------------------------------
    La macchina usata è un i7-4790 a 3.60GHz	|Questi valori sono la media di 3 prove consecutive

    Da una prima analisi è evidente l'efficienza di Xojo nella gestione degli oggetti ListBox, ComboBox, Canvas e in particolare TextArea, sia 64 che 32, rispetto agli equivalenti di VB6.
    Dovendo paragonare Xojo_32 con VB6, pare che quest'ultimo sia più efficiente solo nella manipolazione dei numeri, mentre con le stringhe il VB6 si difende bene, a parte il BubleSort, dove non capisco perchè, ma VB6 domina .
    Detto questo risulta evidente la superiorità del compilatore Xojo a 64 rispetto al 32 e naturalmente rispetto VB6. Per chi è abituato all'IDE di VB6 , troverà quello di Xojo un pò scomodo e ostico, ma dopo qualche ora e con un pò di pazienza si riesce a gestirlo (forse per i progetti complessi e con molti form non è molto comodo), per ora è tutto, buon divertimento.

    questi sono gli screenshot dei programmi di test

    -image-
    -image-
    -image-

    e qui il link con i sorgenti delle due versioni

    Spero di essere stato utile a quanti si vogliano avvicinare a questo ambiente di svilupo, secondo me non sufficientemente valorizzato.
    ...

    Ciao Francesco,
    hai ragione sul fatto che i clienti si fanno influenzare dal sentito dire o dal "cuggino" di turno.

    Ma bisogna diffondere la conoscenza di Xojo, farlo provare: è gratis se non devi compilare un'applicazione stand alone!

    Scrivere sui forum e blog in modo da farlo conoscere. (lo so... scatenando gli haters...)

    Come ha ricordato Geoff Perlman a Berlino (e che posso confermare in modo assoluto), tanti prodotti di "grandi aziende" sono scomparsi o diventati altro totalmente. Usare un prodotto di una "grande azienda" non è garanzia di continuità, anzi tutt'altro anche perché, avendo interessi diversificati, il prodotto potrebbe essere tagliato (specie se non è fonte di guadagno diretto).

    La tua tabella comparativa dovresti pubblicarla in un forum di utenti VB6, magari potrebbero convincersi ad unirsi a noi!

  2. Joost R

    19 May 2017 Pre-Release Testers, Xojo Pro The Netherlands

    @Francesco A - for most of us it's quite difficult to read Italian. Would be interesting to have this in English.

  3. Massimiliano C

    is not verified 19 May 2017 Europe (Italy, Bergamo)

    Ciao,
    ti posso garantire che con un progetto di dimensioni ingenti come ad esempio un gestionale di contabilità completo di tutto quindi : contabilità, magazzino, vendite, beni strumentali, bilancio etc etc, la velocità è sempre identica.
    Anzi, vorrei poter dire che ne ho provati parecchi di gestionali ( Arca professional, Mago, Had Hoc, etc... ) e in alcune procedure come ad esempio l'aggiornamento di listini, la predisposizione di un bilancio a sezioni contrapposte, la fatturazione differita, con xojo ho ritrovato quella rapidità che è quasi simile alle elaborazioni fatte su SCO UNIX e Microfocus COBOL.

  4. Antonio R

    19 May 2017 Pre-Release Testers, Xojo Pro Europe (Italy)

    @Joost R (this is the forum Italian section so he rightly wrote in Italian)
    For your reference: he created a test application to compare VB6 vs Xojo32 vs Xojo64(not optimized)
    In the table you can see the results for:
    Integer array append (3000 items)
    Custom integer array sort (bubble sort)
    Custom integer array sort (merge sort)
    Xojo array sort
    Listbox fill (from the integer array, 2columns)

    ... the same for a string array

    String concatenation
    string split to array
    array join to string
    String replace
    String concatenation by words
    TextArea fill from string

    Mandelbrot: Calculation and painting

    Search for prime numbers between 0 and 10000000
    Fill a Combobox with 664579 numbers

    File read and write (21610000 words)

    He used an i7-4790@3.60GHz

  5. Antonio R

    19 May 2017 Pre-Release Testers, Xojo Pro Europe (Italy)

    Ciao Francesco,
    sono risultati interessanti. Sarebbe interessante vedere il risultato dell'applicazione Xojo64 con il massimo dell'ottimizzazione (dovresti guadagnare performance nei calcoli)

    Come ha detto Massimiliano, anche per progetti complessi l'uso dell'IDE, per quanto migliorabile (ma questo vale sempre per tutto e in ogni caso è in programma un aggiornamento da questo punto di vista), non è un problema.
    Certo, come hai detto, bisogna abituarsi all'organizzazione e a come sfruttarla al meglio.
    E poi non scordiamo che lo stesso codice lo puoi utilizzare per produrre l'applicazione anche per macOS e Linux.

  6. luciano m

    19 May 2017 Pre-Release Testers, Xojo Pro

    @Antonio R Ciao Francesco,
    sono risultati interessanti. Sarebbe interessante vedere il risultato dell'applicazione Xojo64 con il massimo dell'ottimizzazione (dovresti guadagnare performance nei calcoli)

    Come ha detto Massimiliano, anche per progetti complessi l'uso dell'IDE, per quanto migliorabile (ma questo vale sempre per tutto e in ogni caso è in programma un aggiornamento da questo punto di vista), non è un problema.
    Certo, come hai detto, bisogna abituarsi all'organizzazione e a come sfruttarla al meglio.
    E poi non scordiamo che lo stesso codice lo puoi utilizzare per produrre l'applicazione anche per macOS e Linux.

    Aggiungo IOS e tra poco anche Android ;-)

  7. Antonio R

    19 May 2017 Pre-Release Testers, Xojo Pro Europe (Italy)

    Esatto!!

  8. Edited 6 months ago

    Ciao Antonio,

    mi fà piacere il tuo interessamento (visto che sei un 'anziano' del forum), ovviamente per il test che ho riportato ho utilizzato l'ottimizzazione massima per Xojo64, ed effettivamente c'è un notevole miglioramento. Ma non sufficiente da migliorare il risultato ottenuto da VB6 nei test numerici (vedi numeri primi).
    Ovviamente questa differenza non è assolutamente significativa per la stragrande maggioranza delle appilcazioni (parliamo di millionesimi ad operazione) ma c'è.

    Concordo con te e Luciano (che ringrazio per il like) sulla spettacolare e non comune possibilità di poter utilizzare lo stesso codice su diversi OS, e solo questo basterebbe a spostare qualsiaso decisione a favore di Xojo. Ma sai, come ho gia detto, a volte i clienti si fanno influenzare dalle mode e dai ...sentito dire... dall'amico esperto di turno.

    Spero che ritoccheranno l'IDE in meglio, questo ambiente di sviluppo merità di più.

  9. Edited 6 months ago

    For our non-Italian friends:

    To try to avoid overhead, for both VB6 and Xojo the sort functions don't use array class, all values are seconds.
    ------------------------------------------------------------------------------------------------------------
    						|  VB6		|  Xojo 32	|  Xojo 64	|
    ------------------------------------------------------------------------------------------------------------
    Integer array append (3000 items)		|   0.01321	|   0.012026	|   0.006525	|
    Custom integer array sort (bubble sort)		|   2.245812	|  16.61888	|   9.018532	|
    Custom integer array sort (merge sort)		|   0.028688	|   0.041791	|   0.020041	|
    Xojo array sort					|    ---	|   0.015008	|   0.001890 	|
    Listbox fill (Xoyo: time for only 2col)        |   0.301999	|   0.026987	|   0.020228	|
    ------------------------------------------------------------------------------------------------------------
    String array append (3000 items)		|   0.171875	|   0.105026	|   0.054691	|
    Custom string array sort (bubble sort)		| 125.6914	| 155.5215 	|  94.43404	|
    Custom string array sort (merge sort)		|   0.1875	|   0.136116	|   0.073802	|
    Xojo array sort					|    ---	|   0.050611	|   0.347832	|
    Listbox fill (Xoyo: time  for only 2col)        |   0.265625	|   0.030731	|   0.017094	|
    ------------------------------------------------------------------------------------------------------------
    String concatenation (638000 word)		|   		|		|   		|
      (String 319crt progressive queuing)		|   5.288344	|   2.379218	|   2.406868	|
    String split to array				|   1.030594	|   0.065178	|   0.070917	|
    Array join to string				|   0.031844	|   0.023851	|   0.024207	|
    String replace					|   0.126844	|   0.001321	|   0.001413	|
    String concatenation by 30000 words		|   		|		|   		|
      (random_length_Words progressive queuing)	|   0.591687	|   0.132891	|   0.140901	|
    TextArea fill from string with 30000 words	| 159.170563	|  18.157072	|  11.237082	|
    ------------------------------------------------------------------------------------------------------------
    Mandelbrot: 		Calculation		|   2.61481	|   7.23671	|   1.44987	|
    			Painting		|   0.27869	|   0.008241	|   0.003810	|
    ------------------------------------------------------------------------------------------------------------
    Search for prime numbers between 0 and 10000000	|   0.08256	|   0.200393	|   0.143445	|
    Fill a Combobox with 664579 numbers		|  17.05638	|  12.51993	|  13.22566	|
    ------------------------------------------------------------------------------------------------------------
    Write File (21.610.000 words)		      	|   0.24249	|   0.06136	|   0.05446	|
    Read File (21.610.000 words)		      	|   0.23131	|   0.07056	|   0.05618	|
    ------------------------------------------------------------------------------------------------------------
    used an i7-4790  3.60GHz			|These values are the average of 3 tests

    screenshots:
    XOJO64
    XOJO32
    VB6

    source code, VB6 and Xojo:

    and Xojo exe:

  10. Antonio R

    19 May 2017 Pre-Release Testers, Xojo Pro Answer Europe (Italy)

    Ciao Francesco,
    hai ragione sul fatto che i clienti si fanno influenzare dal sentito dire o dal "cuggino" di turno.

    Ma bisogna diffondere la conoscenza di Xojo, farlo provare: è gratis se non devi compilare un'applicazione stand alone!

    Scrivere sui forum e blog in modo da farlo conoscere. (lo so... scatenando gli haters...)

    Come ha ricordato Geoff Perlman a Berlino (e che posso confermare in modo assoluto), tanti prodotti di "grandi aziende" sono scomparsi o diventati altro totalmente. Usare un prodotto di una "grande azienda" non è garanzia di continuità, anzi tutt'altro anche perché, avendo interessi diversificati, il prodotto potrebbe essere tagliato (specie se non è fonte di guadagno diretto).

    La tua tabella comparativa dovresti pubblicarla in un forum di utenti VB6, magari potrebbero convincersi ad unirsi a noi!

  11. Edited 6 months ago

    Scusa Antonio, ma ho cliccato per errore alla 'conferma di risposta'.

    Comunque per il blog, detto... fatto;

    https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/3440221-bring-back-classic-visual-basic-an-improved-versi

    Postato nella fossa dei leoni.

    P.S.
    Sarebbe interessante provare a compilare per Linux e vedere... l'effetto che fà.... io ancora non ho acquistato la licenza per compilare in Linux. se qualcuna posta i file, potrei farli eseguire sulla mia macchina (ho anche una partizione LInux 64)

  12. Daniel T

    19 May 2017 Pre-Release Testers
    Edited 6 months ago

    Adding the following pragmas to PrimeNum.Action resulted in a 2.7x improvement in the prime number search on Windows (0.07 vs 0.19) and a 6x improvement on Mac (0.08 vs 0.49). 64-bit builds running on a Sandy Bridge Core i7 2.7 GHz. On the Windows side I tested on Windows 7 in Parallels, same machine.

    It didn't make any real difference in the UI related code. But it would be worth trying with any of the computational code (vs. UI changes).

    #Pragma BackgroundTasks False
    #Pragma BoundsChecking False
    #Pragma NilObjectChecking False
    #Pragma StackOverflowChecking False
  13. Edited 6 months ago

    Ho appilcato le istruzioni 'PRAGMA' suggerite da Daniel, per correttezza ho rifatto anche i test con VB6 abilitando le ottimizzazioni di compilazioni possibili.
    Questi sono i risultati.

    I've included the 'PRAGMA' instructions suggested by Daniel, for correctness I did also VB6 tests with compilation optimizations.
    These are the results.

    ------------------------------------------------------------------------------------------------------------
    						|  VB6		|  Xojo 32	|  Xojo 64	|
    ------------------------------------------------------------------------------------------------------------
    Integer array append (3000 items)		|   0.01321	|   0.009236	|   0.004337	|
    Custom integer array sort (bubble sort)		|   2.245812	|  15.01898	|   4.500102	|
    Custom integer array sort (merge sort)		|   0.028688	|   0.040792	|   0.023041	|
    Xojo array sort					|    ---	|   0.001581	|   0.001510 	|
    Listbox fill (Xoyo: time required for only 2col)|   0.301999	|   0.026277	|   0.023228	|
    ------------------------------------------------------------------------------------------------------------
    String array append (3000 items)		|   0.171875	|   0.137029	|   0.066691	|
    Custom string array sort (bubble sort)		| 125.6914	| 156.6215 	|  86.33402	|
    Custom string array sort (merge sort)		|   0.1875	|   0.135917	|   0.076802	|
    Xojo array sort					|    ---	|   0.049611	|   0.347832	|
    Listbox fill (Xoyo: time required for only 2col)|   0.265625	|   0.024231	|   0.019094	|
    ------------------------------------------------------------------------------------------------------------
    String concatenation (638000 word)		|   		|		|   		|
      (String 319crt progressive queuing)		|   5.307318	|   2.378118	|   2.391168	|
    String split to array				|   1.040511	|   0.064971	|   0.068017	|
    Array join to string				|   0.021814	|   0.023988	|   0.025201	|
    String replace					|   0.127824	|   0.001291	|   0.001400	|
    String concatenation by 30000 words		|   		|		|   		|
      (random_length_Words progressive queuing)	|   0.592677	|   0.132771	|   0.131902	|
    TextArea fill from string with 30000 words	| 158.980513	|  18.160071	|  11.222012	|
    ------------------------------------------------------------------------------------------------------------
    Mandelbrot: 		Calculation		|   1.69471	|   7.53221	|   1.96981	|
    			Painting		|   0.28110	|   0.008001	|   0.002720	|
    ------------------------------------------------------------------------------------------------------------
    Search for prime numbers between 0 and 10000000	|   0.07726	|   0.151383	|   0.079435	|
    Fill a Combobox with 664579 numbers		|  17.85338	|  12.98973	|  13.82516	|
    ------------------------------------------------------------------------------------------------------------
    Write File (21.610.000 words)		      	|   0.20119	|   0.05902	|   0.05226	|
    Read File (21.610.000 words)		      	|   0.23213	|   0.06876	|   0.05700	|
    ------------------------------------------------------------------------------------------------------------
    used an i7-4790 a 3.60GHz			|These values are the average of 3 tests

    Effettivamente sia VB6 che Xojo hanno avuto miglioramenti. Xojo64 è quello che ha ottenuto maggiori benefici, ma anche VB6 ha migliorato qualcosa rispetto ai tempi ottenuti senza flag di ottimizzazione.

    Indeed both VB6 and Xojo have had improvements. Xojo64 has gained more benefits, but VB6 has also improved something compared to the times obtained without optimization flags.

    Xojo64
    Xojo32
    VB6

  14. Massimiliano C

    is not verified 20 May 2017 Europe (Italy, Bergamo)

    Come ha detto Antonio, a breve con l'implementazione della compilazione in ambiente Android, Xojo sarà l'unico sistema di sviluppo che supporta tutte le piattaforme HW.
    Inoltre ha una longevità invidiabile; questo è importante, perchè abbiamo visto negli ultimi 30 anni nascere e morire un'infinità di compilatori, ambienti rad, etc.
    La settimana scorsa ho avuto un colloquio di lavoro presso un'azienda che sviluppa gestionali per la produzione, dove mi veniva richiesto di saper utilizzare un tool di sviluppo e/o un ambiete RAD che abbia almeno un ciclo di longevità ventennale. ora, se tutto andrà bene comincerò a lavorarci a breve.

or Sign Up to reply!