Newsgroup: it.comp.lang.vo-clipper
Titolo: Ultima domanda del 2005

Perchè questa mattina con un programma scritto in Clipper per passare
circa 2.000.000 di record ci ha messo una manciata di secondi mentre
con VO ( DBServer ) ci impiega le ore ?
Ciao a tutti e buon inizio 2006.

 ha scritto:
Non possiamo sapere 
cosa intendi per "passare"
e nemmeno per "manciata"
quindi passiamo pure al prossimo anno
con una manciata di auguri :-)
Eugenio.


>
mi hai sollecitato un racconto, che è una storia vera.
Ho un cliente che con un'applicazione scritta in clipper nel 1996 e 600.000 
records fattura 400.000 euro al mese circa, perchè il tempo per loro è 
denaro; ogni volta che cerco di fargli vedere la stessa applicazione in VO o 
Fivewin rischio di perderlo, quindi desisto. a buon intenditor........
firmato: fondamentalista della modalità carattere 

 ha scritto nel
messaggio news:43b6ac10$0$1062$4faf...@reader1.news.tin.it...

hai provato con SuspendNotification() ???
buon inizio 2006
Paolo

 Perchč questa mattina con un programma scritto in Clipper per passare


Buno anno a tutti . Alessandro
ciao,
Eugenio.
 

 ha scritto nel
messaggio news:43b7b11d$0$1075$4faf...@reader3.news.tin.it...


 indice?
Certo, se i records da prendere in considerazione stanno in un intervallo 
allora un indice potrebbe aiutare se tale range č piccolo rispetto al totale. 
Altrimenti penso sia piů veloce uno scorrimento senza indice.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
The EMG Music page:         
http://www.emagsoftware.it/emgmusic
 

Ho provato ad azzerare un campo con DBU (DOS) verzione tedesca con un
Db di circa 550.000, applicando un replace e quindi utilizzando un
blocco di codice ci impiega circa 20sec.
Poi ho provato in VO tramite la DbServer e ci impiega circa 60 sec.
Ho provato tramite il codice in calce accedendo all'area senza
utilizzare oggetti e classi, ed addirittura visualizzando a video e
utilizzando anche una variabile da incrementare.
Impiega circa 2 sec per elaborare 200.000 record, poi rallenta per
problemi di memoria, ma il risultato è comunque ottimo, meno di 17
sec. Non riesco a ricordare quale impostazione utilizzavo 6 o 7anni fa
per impostare la memoria Ram a disposizione, ma vi garantisco che il Vo
è molto più veloce del clipper.
Da notare che tramite l'ausilio di un blocco di codice si possono
migliorare ancora di più le prestazione.
Il codice di seguito è quello da me testato.
Local i AS DWORD
	SELF:oDCFixedText2:Value := "Inizio " + NTrim(Secs(Time()))
	IF !DBUSEAREA(TRUE, "DBFCDX", "C:\MicroBTCa\DirShr\SBiglie.Dbf")
		SELF:oDCFixedText1:Value := "Errore"
		RETURN SELF
	ENDIF
	DO WHILE !VODBEof()
		IF (i % 10000)==0
			SELF:oDCFixedText1:Value := NTrim(i)
		ENDIF
		i+= 1
		VODBFieldPut(4, 0)
		VODBSkip(1)
	ENDDO
	SELF:oDCFixedText3:Value := "Fine" + NTrim(Secs(Time())	)
	DBCLOSEAREA()
Ciao a tutti, Massimo Martino

 		i+= 1
leva questa parte di codice, hai una variabile incrementale, una doppia
comparazione, una chiamata alla funzione NTrim() e assegni il risultato ad
un controllo testo. Tutto questo genera un sovraccarico inutile. 
Prova a fare solo alla fine del ciclo la differenza tra nStart e nEnd e
vedi che risultato ti da ;)
-- 
Ciao
Stefano

Rispondo a tutti facendo una premessa . Questo quesito l'ho già postato in 
passato e non sono mai riuscito ad avere una soluzione al problema (anche
nel newsgroup internazionale) nemmeno dai guru di VO.
Innanzitutto ho fatto alcune prove con un banalissimo programma utilizzando
tre diversi sistemi :
    attraverso gli alias
    attraverso il DBServer generato dal VO
    attraverso DBServer creando la classe manualmente (solo definizione di 
CLASS e di  INIT)
i risultati sono stati i seguenti :
Analisi di 1.070.000 record per un totale di 570 MB (tempi minimi rilevati 
su più test) azzerando un campo numerico :
Clipper : 70 secondi
DBserver VO : 445 secondi (7 minuti e mezzo !!!)
DBServer senza access/assign : 168 secondi (utilizzando FiledPut())
Alias VO : 115 secondi
Visto che gli alias non li utilizzo capite bene la fregatura . Oltretutto un 
sistema a 32 bit non dovrebbe essere più veloce di uno a 8/16 ???
Non capisco Massimo quando mi scrive che VO è più veloce di Clipper , 
indubbiamente negli array ma dai test fatti da me non risulta per i DB (test 
identico praticamente
all'esempio che mi hai riportato).
Considerando che io utilizzo i DBServer e che incrocio molto pesantemente i 
dati , per azzerare un milione di record rischio di guardare il PC anche per 
diverse ore.
Inoltre quando sono in un ciclo do while molto pesante se al suo interno non 
si esegue un applicationexec blocco tutto e tutti in più pur scaricando la 
memoria con
l'istruzione Collect() il PC molto spesso si impianta, cosa che non succede 
se utilizzo gli Alias !!! Perchè ?
Vorrei andare a fondo della questione quindi ogni consiglio è ben accetto .
Grazie a tutti Alessandro.

 ha scritto:

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:82Z54Z83Z34Y11...@usenet.libero.it...


[.......]
Questo (ma non solo) è uno dei motivi per il quale abbiamo deciso di passare
a MySQL (vedi Danilo) .
[.......]
Anche io ho preso la stessa decisione, per i motivi da te descritti ma anche 
per altri, vedi relazioni tra dbf contro query composte che semplificano 
enormemente il lavoro, vantaggi di gestione rete, ecc...
Credo le la soluzione ottimale sia quella di utilizzare database 
relazionali, mySql, Firebird o altri, uniti a un rdd personalizzato che ti 
permetta di usare i server, libreria di Danilo o altre simili, che ti 
permettono di operare con estrema velocità (mai paragonabile a quella del 
clipper, sigh!).
IMHO.
Ciao.
                                                Francesco 

passare a sql oppure riscriversi il proprio RDD . 
A questo punto, hai pensato allo SPEDBF di Antonello Negrone?
Io non lo uso, perchè sono passato a MySQL (vedi Danilo...), ma mi è
sempre sembrata una soluzione molto ineterssante.
ciao
Diego Decandia

 ha scritto nel messaggio 
news:62rkr1l5l5a036lti...@4ax.com...


 ha scritto nel
messaggio news:43ba44cd$0$1077$4faf...@reader3.news.tin.it...


 ha scritto nel 
messaggio news:43bbef1e$0$328$5fc...@news.tiscali.it...



Dipende se hai già un programma scritto in VO che utilizza i DBF
o parti con un nuovo programma.
ADS è un sistema client-server che utilizza i DBF. In pratica
passi al sistema client server senza cambiare una riga di codice.
Se parti con un programma nuovo o sei preparato a cambiare
la logica del programma allora MySQL è sicuramente
una buona scelta
Saluti
Paolo


 passi al sistema client server senza cambiare una riga di codice.
In realtà può essere vero come può non esserlo. Ad esempio, nel mio caso non 
sarebbe vero e spiego perché: io ho sempre utilizzato pesantemente la 
possibilità di specificare proprie funzioni come chiavi o condizioni FOR 
dell'indice. Questo con ADS, che come tutti i sistemi client/server è 
un'applicazione esterna, non è possibile.


 ha scritto nel 
messaggio news:43bc34f3$0$332$5fc...@news.tiscali.it...


 ha scritto nel 
messaggio news:43bc3f0d$0$1075$4faf...@reader1.news.tin.it...


 siano esigenze geografiche extra net .
Non ne sarei tanto sicuro. Per me si potrebbero utilizzare in qualunque 
situazione. Certo, se ti fa comodo la pappa pronta allora scegli un motore SQL 
ma ne accetti anche le limitazioni. Di contro, nei DBF devi gestire tutto tu 
ma questo li rende più versatili. Spesso è il cliente ad imporre il database. 
Al solito, c'è la scelta giusta per ogni situazione.
