Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 + DAO su MDB - velocità esecuzione.

Immaginiamo una rete con 5/10 PC ed un server
(oppure un PC che contiene il datatabase MDB
che funge da server).
Tutti i PC hanno xp o w7.
Il programma VB6 è presente su tutti i PC e
lavora sul database MDB.
Il programma utilizza DAO per eccedere al
database.
 
Tutto funziona correttamente e l'unico problema
è la velocità di esecuzione.
 
Una funzione del programma, utilizzata abbastanza
frequentemente, impiega 15/20 secondi se eseguita
sul PC che contiene il database.
Se eseguita dagli altri PC il tempo sale a circa
due minuti.
 
Stupidamente ho provato da un altro PC a eseguire
l'exe che risiede sul PC col database.
I tempi di esecuzione non sono migliorati.
 
La mia domanda è questa:
Esiste un modo per far girare l'exe sul PC che
contiene il database facendolo partire da un
altro PC ?
Spero di essermi spiegato bene.
 
Oppure se avete qualche altro consiglio per
velocizzare (che non sia quello di riscrivere
tutto il programma con ADO e client/server)
.....
 
Grazie e saluti.
Sauro
 
 
 
 

 tutto il programma con ADO e client/server)
 
Diamo per scontato che la funzione lavori sui dati del database, prima 
che te lo chiedano altri, sarebbe utile vedere il codice della 
funzione, sapere che mole di dati è coinvolta nelle operazioni...
 
-- 
Greg
 
 

 Sauro
 
Per esistere esiste
http://www.aads-worldwide.hk/index.html
 
ma tamponi senza risolvere il problema
Ti consiglierei di indagare il motivo per cui la funzione ci mette 20 
secondi a completarsi
Serve disco piu' rapido? Serve piu' processore? Serve un algoritmo migliore?
Quando hai capito il problema, hai gia' fatto meta' lavoro
 
 
 
 

 Quando hai capito il problema, hai gia' fatto meta' lavoro
 
Non escludo che l'algoritmo possa essere migliorato e non posso
sostituire tutti i PC con dei nuovi pià potenti.
Comunque non è sui 20 secondi che vorrei migliorare ma bensi
sui 2 minuti.
 
Grazie Roberto
Sauro 
 
 

 sapere che mole di dati è coinvolta nelle operazioni...
 
Il codice sarebbe troppo lungo.
 
Si tratta comunque di un MRP che analizza un migliaio di voci
di ordini clienti su 10/15 mila anagrafiche di fabbricazione con
30 mila legami di distinta base.
 
Mi vien da ridere pensando che nel 1980 un programma analogo
sulla medesima mole di dati alle 8 del mattino non aveva ancora
terminato l'elaborazione iniziata alle 18 del giorno precedente.
Ora danno di matto se devono aspettare 2 minuti.
 
Comunque mi accontenterei di ridurre il gap tra 20 secondi e
due minuti.
 
Ciao Greg e grazie
Sauro
 
 
 

 
 
Oltre che elaborare molti record, deve anche *restituire* molti record?
 
Perchè in caso contrario, potresti crere un piccolo processo residente sul PC con il database in locale, e metterlo in ascolto via TCP o simile... a quel punto invece che invocare le funzioni DAO sui vari PC in rete, mandi il comando al componente remoto e fai fare tutto a lui.
Potrebbe valere la pena provare anche nel caso in cui tu debba restituire dati, ma in quel caso, dovendo aggiungere l'overhead del trasferimento via TCP, potrebbe non dare benefici


Vedi passo per passo quali sono le parti che rallentano. (metti degli stop,
dei log con data/ora).
Magari c'è semplicemente un campo da indicizzare sul DB.

Sauro ha pensato forte :

Sui Pc client che antivirus hai?
 
 
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

"Luca D" ha scritto

L'idea non è male. E direi che l'impatto dovrebbe
esseer positivo anche in quel caso, visti i tempi
in gioco. In due minuti di rete locale si dovrebbero
poter trasferire decine o centinaia di mega, a meno
che la rete non sia davvero scrausa.
Non credo che i dati richiesti siano di quest'ordine
di grandezza.
 
Bye, G. 
 
 

 altro PC ?
 
puoi usare il programma in modalità terminal server,quindi i pc usano REMOTE 
DESKTOP per accedere ed eseguire l'eseguibile sul server . 
 
 

 REMOTE DESKTOP per accedere ed eseguire l'eseguibile sul server .
 
Non so come funziona questo "terminal server".
 
Prima di andare a cercare ti chiederei solo:
 
Questa modalità si può attivare e disattivare velocemente?
 
Grazie Vittorio.
Sauro 
 
 

 Sui Pc client che antivirus hai?
 
Oddio, a questo non avevo pensato.
Ricordo solo che è un antivirus strano.
Domani verifico.
 
Ciao Supermike
Sauro
 
 

TCP, potrebbe non dare benefici
 
Interessate sono 3 tipologie di tabelle:
1)  Quelle normali di anagrafiche e ordini
2)  Quelle di transito che servono solo per l'eleborazione
3)  Quelle con i risultati finali (non piů di 2000 records)
 
La procedura, in fase iniziale, cancella tutti i records delle
tipologie 2 e 3.
Devo precisare che detta procedura non dovrebbe in teoria
essere utilizzata cosě frequentemente.
E' solo un'azienda che ha un insolito modo di lavorare.
 
Comunque questa frequenza fa si che il database (access)
si ingrossi velocemente e almeno una volta al mese devo
fare la compattazione del database prima che "esploda".
 
Cosě, anche per il problema di cui sopra, ho spostato le
tabelle del tipo 2 su un database residente su ogni PC.
 
I risparmi di tempo sono stati modesti e anche quelli di
spazio.
 
Ciao Luca e grazie.
Sauro
 
 
 


Per usare Terminal Server c'è bisogno di un server che esegua il 
servizio e abbia installato il servizio di licenze di terminal. Non è 
proprio una soluzione semplice/economica da adottare a meno che tu non 
dia accessi amministrativi agli utenti.
 
Ciao, Vincenzo

 
"vincepik@work" <in...@F-U-C-K-S-P-A-M-M-E-R-monkeysoft.it> ha scritto nel 
messaggio news:lfsd45$8r1$1...@virtdiesel.mng.cu.mi.it...

Con prodotti tipo Xp Unlimited et affini, con 200 euro hai il server e 5 
client disponibili
 
 

 wrote in
news:lfqmpb$gne$
1...@speranza.aioe.org
: 

senza sapere niente della procedura (no, dire che in fase iniziale cancella 
non si sa quanti record non e' indicativo) si puo' giusto buttar li' 
proposte a caso.
una e' il sempre verde passaggio a un rdbms.
 
metti la logica (o almeno la parte *pesante*) in una stored procedure, 
copia su rdbms la/le tabelle che servono creando almeno gli indici minimi e 
poi prova a eseguire il tutto.
 
cosi' hai una indicazione per capire se e' la strada giusta.
 
 
secondo me comunque con access come backend puoi arrivare solo fino a un 
certo punto; quando hai elaborazioni pesanti il fatto che non sia un 
database server si fa sentire, come sta capitando a te.
 
 
-- 
Paolo opg
 
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--