Web Service e grandi moli di dati

lunedì 20 febbraio 2006 - 18.00

adima80 Profilo | Junior Member

Ciao,
mi è capitato questo problema: devo estrarre da una tabella circa 80000 record passando da un web service, e in produzione il numero di record potrebbe salire, e il mio asp_net working process viene ucciso dal OS perchè consuma troppe risorse, in pratica occupa più del 60% della memoria totale della macchina. Il pc sul quale è intallato il web server e il relativo web service è una macchina XP SP2 con 512 MB di RAM. Estraggo i record tutti insieme tramite un SqlDataAdapter e il relativo metodo Fill che riempie un dataset che voglio inviare hai client.

Di fronte ad una mole di dati così ampia è meglio leggere l'insieme di record a "pezzi" oppure sbaglio propio approccio?


Grazie a tutti anticipatamente



p.s.: Dimenticavo, effettuo una chiamata sincrona al web service.

Brainkiller Profilo | Guru

>Di fronte ad una mole di dati così ampia è meglio leggere l'insieme
>di record a "pezzi" oppure sbaglio propio approccio?

Ciao,
sicuramente in questo caso è consigliabile ricavare i dati chunk per chunk (blocco a blocco). Non so, tipo 5000 record alla volta.

Questo approccio incide sulle performance perchè se tu crei un DataSet sul server e con il DataAdapter fai un Fill i dati vanno a finire tutti nel DataSet e di conseguenza in memoria RAM e rallentano tutto oltre ad occupare tutta la memoria.

Se vuoi continuare così puoi modificare il 60% di memoria occupata del Worker Process se non erro nel machine.config che trovi sul tuo PC. Lo puoi spostare a 80,90% in modo che tutto funzioni in ogni caso correttamente.

ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

adima80 Profilo | Junior Member

Ciao, grazie per il consiglio... ho sperimentato qualche tecnica, ma hio ancora dei dubbi:

Esperimenti :
1) Collezzione di oggetti struttura, in pratica mi sono creato una classe che rispecchia il mio record e la valorizzo tramite un data reader, il limite massimo di record che riesco a recuperare è 50000 per volta...

2)scrivo i dati in un file di testo, un record per volta... tutto ok, ma un po lento. il file diventa di 16 MB all'incirca

3) paginazione dei dati, ma il calo di prestazioni è evidente anche qui

Mi chiedevo: sono io che continuo a sbagliare? come mai in memoria il mio recordset diventa di dimensioni incredibili, tali da far crollare il mio web service?

Probabilmente dovrei adottare altre tecniche, in effeti sto usando un web service perchè il programma dovrebbe funzionare indifferentemente sia su internet che su una intranet, solo che il calo di prestazioni all'interno di una lan è troppo grande... dici che mi converrebbe, almeno al'interno della lan staccarmi dai web service?

adima80 Profilo | Junior Member

Ciao,
HO necessità di recuperare i record tutti insieme per effettuare delle stampe, stampe anche molto grosse che coinvolgono molte viste che si richiamano tra di loro. Alla fine ho optato per una soluzione mista, l'utente all'interno della lan userà chiamate dirette al db, mentre da internet userà il web service, per il web service adotterò delle tecniche di paginazione di fronte a grosse mole di dati, ed impedirò le stampe voluminose, che alla fine farò creare direttamente a sqlserver tramite reporting service e poi invierò tramite mail. Mi sembra una soluzione nn perfetta ma che almeno nn stravolge troppo l'architettura del progetto...


grazie comunque per l'attenzione.
Ciao
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