Tempo di attesa alla prima apertura form

sabato 18 ottobre 2008 - 14.29

denis.basei Profilo | Senior Member

Buon sabato a tutti!

C'è un form contenente un controllo datagridview. Nell'evento Form_Load viene fatta la Fill del datatable i cui records sono visualizzati nel controllo datagridview. Allo stato attuale la tabella in questione ha 1 record con 2 campi. Il datatabase a cui mi collego è Pervasive. Non capisco perchè la prima volta che apro il form c'è un tempo di attesa di circa 2, 3 secondi. Le n volte successive che apro lo stesso form questo tempo non c'è. Il delay è legato alla connessione con l'origine dati, ma in teoria la connessione viene ristabilita ogni volta che apro il form. come posso fare per eliminare questo tempo di attesa, poco elegante per chi apre la prima volta il form?


Grazie
Denis B. - www.baseiengineering.com

alexmed Profilo | Guru

Ciao
Ti dico subito che non lo sò, ma visto che anch'io ho notato questo comportamento, volevo esporti il mio parere.
L'idea che mi son fatto io è che, come per le altre applicazioni, la prima volta è sempre più lenta perchè devono andare ad occupare la memoria.
Dopo che si chiude l'applicazione alcune tracce restano in memoria e proprio per avere un più rapido avvio la seconda volta.
Sottolineo la premessa, non vorrei dire delle grandissime cavolate, ma è un ricordo di un articolo letto su una rivista di PC.
Se fosse coì allora i due o tre secondi di attesa non li puoi eliminare, potresti solo spostarli a dopo il caricamento del form con un Button di connessione.

Ciao

berets Profilo | Newbie

Dunque le possibilità sono almeno 2 :

1) la lentezza è dovuta alla verifica delle credenziali da parte del DBMS, e ciò non si verifica sempre poiché probabilmente il motore del DBMS mantiene una cache degli ultimi accessi,e quindi la prima volta ci mette un po', poi la seconda volta 'pesca' dalla cache; per verificarlo basta che apetti un po' più di tempo dopo la prima esecuzione; dalla mia esperienza ti posso dire che certi DBMS hanno un tempo di accesso (di primo accesso) veramente 'letale'. IBM DB2 UDB for iSeries (in pratica DB2 su OS/400) è uno tra i più performanti motori di database in circolazione, ma ha un tempo di primo accesso nell'ordine di diversi secondi.
2) la lentezza è dovuta al JIT (Just In Time) compiler, che al primo accesso (o comunque dopo che è passato un tot di tempo dall'ultima esecuzione) deve compilare le .dll .NET in codice nativo, e quindi ci mette un po' di più; come saprai le .dll managed non sono compilate in nativo, ma in MSIL, un linguaggio intermedio che il framework interpreta. Per ovviare alla compilazione JIT puoi precompilare la tua applicazione utilizzando ngen ( http://msdn.microsoft.com/en-us/magazine/cc163808.aspx )

Una possibile soluzione per entrambe le problematiche potrebbe una bella splash form, elegante e pittoresca =)
HTH

Lanello Profilo | Senior Member

ciao!

hai due modi per risolvere il problema...

se hai l'admin del server di database nelle configurazioni gli devi imporre di NON risolvere i nomi DNS, questo velocizza notevolmente i tempi di connessione al database.

altrimenti se non hai questa disponibilità puoi aprire il form forzando la visualizzazione del form prima del fill

me.show application.doevents

basta questo comando prima di fare il fill.


----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5