56 messaggi dal 31 maggio 2004
Salve a tutti,
il mio problema è questo: leggo la lista di email dal server remoto, le memorizzo nel mio database e poi faccio il DataBind con il mio GridView che mi mostra la lista delle email trovate. Fin qui tutto ok.

Siccome però la lettura dal server è lenta, ogni volta che accedo alla pagina dove c'è il GridView, devo aspettare molto tempo prima che si veda qualcosa.

Per accelerare la procedura avevo pensato di fare così: faccio prima il DataBind del GridView con il database e mostro la lista delle email, POI vado a leggere sul server le nuove e mail e se ce ne sono le memorizzo nel DB e poi rifaccio il DataBind per aggiornare il GridView.

Detto a parole è semplice, ma farlo no, almeno per me. Il problema infatti è che se faccio tutte queste operazioni al Load della pagina, la pagina viene sempre e comunque renderizzata alla fine di tutto e quindi sto sempre li ad aspettare che il GridView si aggiorni.

Avevo pensato di usare il PageAsyncTask per far avvenire questi eventi in maniera asincrona e in parallelo e in effetti qualcosa si accelera, ma non ottengo il mio scopo, ovvero: fare vedere intanto il GridView popolato e POI (magari in maniera asincrona) aggiornarlo con la lettura dal server.

Quale strada mi consigliate? Qualcuno ha già affrontato un problema simile?

Grazie mille a tutti.
Igor
Igor Baldacci wrote:
Quale strada mi consigliate? Qualcuno ha già affrontato un problema simile? Grazie mille a tutti.

prendi i dati dal db e li mostri subito a video. poi fai una richiesta async via AJAX che aggiorni con i nuovi elementi.
la soluzione migliore sarebbe fare la lettura con un servizio che ad intervalli le importa, togliendo questo onere all'applicazione web e semplificando parecchio la problematica.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
6 messaggi dal 20 ottobre 2008
da quanto ho capito la sincronizzazione tra i 2 db potrebbe avvenire in modo asincrono rispetto alla pagina web,se ti è possibile.
Però dipende dal database e dalle possibilità di operare direttamente sul database.
In ogni caso terrei l'elenco delle email in qualche cache e otterrei dal tuo database solo il delta (gli indizzi che sono stati aggiunti dall'ultima volta che ho avuto accesso al db) però è legato molto dall'architettura del database.
E poi dipende da come intendi aggiornare l'elenco: su richiesta o in modalità asincrona.
Comunque dovresti slegarti dai colli di bottiglia , come un database lento, e cercare di effettuare le operazioni con delle callback che ti restituiscano esclusivamente il set di dati che ti interessano senza generare postback e ricaricare l'intera pagina.
56 messaggi dal 31 maggio 2004
esatto! ma come la faccio la seconda richiesta async con AJAX?
Igor Baldacci wrote:
esatto! ma come la faccio la seconda richiesta async con AJAX?

http://www.aspitalia.com/ricerca/super.aspx?key=ajax
io ti consiglio di andare di jQuery...
troverai molto materiale, basta cercare.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
56 messaggi dal 31 maggio 2004
Daniele, grazie mille per la pazienza. E grazie anche a User_1977!

Ok... ho passato tutta la notte a googolare ma non ne sono uscito. La realtà è che non so bene cosa cercare!

Ho provato a vedere come lanciare richieste asincrone con jQuery ma non credo di aver trovato quello che mi serve.

Ho provato anche a vedere la tecnica di refresh dell'update panel via javascript ma non credo neanche questa sia la via giusta.

Chissà se mi riesci a dare l'imbectata giusta. Il mio codice più o meno è questo:

Al Page_Load faccio il databinding del GridView, dopo di che vorrei lanciare la mia procedura per leggere le email e uploadare il DB, e quindi rifare il DataBind:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Not Page.IsPostBack Then

myGridView.DataSourceID = dsEmail
myGridView.DataBind

' Lancio procedura in maniera asincrona
' -------------------------------------
'
' MyProcedure + Secondo DataBind
'
'

End If

End Sub


Non so se è giusto come flusso e che tipo di chiamata jQuery fare. Vi ringrazio in anticipo per ogni delucidazione possibile.

Igor
Igor Baldacci wrote:
Non so se è giusto come flusso e che tipo di chiamata jQuery fare. Vi ringrazio in anticipo per ogni delucidazione possibile.

non è giusto. tu devi caricare i dati nel db quando la pagina parte, far partire una chiamata asincrona con jquery dopo importi nuovamente i dati e, quando hai finito, richiedi alla pagina di aggiornarsi. come l'hai scritto tu non potrà mai andare, perché una pagina è sincrona per definizione e quindi quello che scrivi deve finire perché si veda video.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
56 messaggi dal 31 maggio 2004
Daniele, il concetto mi è chiarissimo, è metterlo in pratica che mi torna difficile.

Cosa posso scrivere su google per cercare qualche esempio?

... scusa ma "async request" non mi prota a nulla

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.