Performance... Xojo vs VB6

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



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.

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

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.

@Joost Rongen (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

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.

[quote=331630:@Antonio Rinaldi]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.[/quote]
Aggiungo IOS e tra poco anche Android :wink:

Esatto!!

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.

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:

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!

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)

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

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

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.