36 messaggi dal 14 dicembre 2005
Nella lettura dalla tabella SQL Server (uso una stored procedure) riempio un oggetto input:

While LeggiDati.Read
DatiSosteLocalizza.Value &= CStr(LeggiDati(0)) & "," & CStr(LeggiDati(1)).Replace(",", ".") & "#" & LeggiDati(2) & "?" & LeggiDati(3) & "!" & LeggiDati(4) & "$" & LeggiDati(4) & "^"
End While

Ma mettendo come filtri nella lettura nella tabella delle date ampi, mi ritorna l'errore in oggetto.

Domanda: l'errore è dovuto a sql che va in timeout o è dovuto al fatto che uso un oggetto con il quale il riempimento è troppo lento e per questo mi ritorna l'errore? Anche perché in un altra pagina uso una lettura quasi uguale con una grid, ma usando le date ampie non ho l'errore indicato.

Grazie.
Dave
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Dave,
credo che il timeout in questione sia quello di ASP.NET, ovvero la pagina sta impiegando troppo tempo a completare la sua esecuzione e quindi viene terminata forzatamente.

Più che aumentare il numero di secondi del timeout, prima proverei ad ottimizzare il codice. Il timeout infatti è un sintomo che qualcosa potrebbe funzionare meglio.

Un problema è sicuramente qui, specie se il DataReader contiene molti record.
DatiSosteLocalizza.Value &= CStr(LeggiDati(0)) & "," & CStr(LeggiDati(1)).Replace(",", ".") & "#" & LeggiDati(2) & "?" & LeggiDati(3) & "!" & LeggiDati(4) & "$" & LeggiDati(4) & "^"


Usare l'operatore di concatenazione &= in un ciclo come quello è deleterio per le risorse del server, perché - a causa dello string interning - costringi il framework a mantenere in memoria tante versioni della tua stringa, una per ogni iterazione del ciclo. Ne consegue che, ad ogni giro, il tuo codice diventa via via sempre più lento perché il framework deve allocare sempre più memoria.

Prova quindi con un approccio differente, usando lo StringBuilder.
Dim sb As New StringBuilder()
While LeggiDati.Read
sb.Append(CStr(LeggiDati(0)) & "," & CStr(LeggiDati(1)).Replace(",", ".") & "#" & LeggiDati(2) & "?" & LeggiDati(3) & "!" & LeggiDati(4) & "$" & LeggiDati(4) & "^")
End While
DatiSosteLocalizza.Value = sb.ToString()


Usare uno StringBuilder è la maniera migliore per costruire delle stringhe e dovresti subito notare un netto miglioramento.

Poi, altre cose si potrebbero dire sulla quantità di dati che stai inviando al client. Perché ne invii molti, anziché inviare solo una pagina di risultati alla volta?

Vedo che usi vari caratteri separatori, come mai?

ciao,
Moreno
Modificato da BrightSoul il 22 agosto 2014 20.41 -

Enjoy learning and just keep making
36 messaggi dal 14 dicembre 2005
L'applicazione e' stata costruita con il VS2003, ben nove anni fa ed era al mia seconda applicazione nell'ambito Web.
Dovevo passare dei dati dal server al client (quindi "Vb" al "Javascript") ma utilizzandoli prima in altre funzioni dal server.
Dato che ora ho questi errori, mi è sembrato opportuno chiedere, ma solo per mia curiosità, dato che ora dovrò rivedere l'applicazione e potrò utilizzare delle variabili più idonee (tipo json) più affidabili e "meno" impegnative dell'oggetto da utilizzato. Come dire era una logica meno compatibile ma più utilizzabile per le mi esigenze!

Mille grazie per la risposta,
dave
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Dave,

dave11 ha scritto:

dovrò rivedere l'applicazione

Bene, un'ottima opportunità per renderla più efficiente.

dave11 ha scritto:

dati dal server al client (quindi "Vb" al "Javascript")

Forse l'hai già usato ma penso che WebApi ti sarà molto utile in questo caso. Ti sgrava da molti compiti, come quello ti serializzare gli oggetti in JSON o di "sporcare" il codice con della logica filtraggio. WebAPI è già interrogabile via Javascript con la sintassi OData, uno standard per impostare delle Where (filtro), OrderBy (ordinamento) e Select (proiezione).

Se non dovessi conoscerlo già, qui su ASPItalia trovi dei contenuti utili.
http://tags.aspitalia.com/ASP.NET_Web_API/

ciao,
Moreno

Enjoy learning and just keep making

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.