Ciao a tutti

volevo sottoporre questo problema.

sto sviluppando un portale per l'acuisizione di ordini
di bevande

l'applicazione viene supportata da un DB sqlserver sullo stesso
server del sito asp.net

in tutte le pagine dove vengono caricati dati su gridview
la pagina ci mette a volte anche alcuni minuti prima di essere
renderizzata, utilizzano updatepanel e updateprogress
mi accorgo che metà del tempo l'update progress gira
l'altra metà si blocca e aspetta che la pagina sia completamente
caricata.
questo si verifica quando la mole di dati da carica è abbastanza importante
(almeno credo) circa 500 - 1000 righe

avevo pensato di caricare inizialmente l'archivio in memoria
e da li poi filtrarlo secondo richiesta ma prima chiedo a voi se è normale tutta questa lentezza.
Ciao,

difficile dire da cosa può dipendere. Ci sono vari fattori tra cui la connessione (tua verso il server, tra server web e db). Prova a loggare i tempi che ci mette la tua pagina a caricare in vari punti isolando la parte query e la parte di bind: in questo modo puoi almeno capire dove rallenta. Se usi un RowDataBound, occhio a non fare query altrimenti vengono ripetute per ogni riga (500/1000 volte).
Magari prova a postare del codice

Ormai programmano tutti... ma la professionalità appartiene a pochi
in roedatabound faccio solo questo

Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

If Not Session("opzioni") Is Nothing Then
If e.Row.RowIndex > -1 Then
Dim tb_opzioni As New DataTable
tb_opzioni = Session("opzioni")
Dim oma As TextBox = e.Row.FindControl("txt_qtao")
Dim btop As ImageButton = e.Row.FindControl("BTN_OP")
Dim btom As ImageButton = e.Row.FindControl("BTN_OM")
Dim txtsc1 As TextBox = e.Row.FindControl("Txt_sc1")
Dim txtsc2 As TextBox = e.Row.FindControl("Txt_sc2")
Dim TxtscV As TextBox = e.Row.FindControl("Txt_scV")
oma.Enabled = tb_opzioni.Rows(0).Item(1)
btop.Enabled = tb_opzioni.Rows(0).Item(1)
btom.Enabled = tb_opzioni.Rows(0).Item(1)
txtsc1.Enabled = tb_opzioni.Rows(0).Item(0)
txtsc2.Enabled = tb_opzioni.Rows(0).Item(0)
TxtscV.Enabled = tb_opzioni.Rows(0).Item(0)
End If
Else
Response.Redirect("~/Default.aspx")
End If
End Sub

perche devo bloccare alcune funzioni in base al ruolo dell account



mentre la pagina è cosi composta

<asp:GridView ID="GridView1" runat="server"
DataSourceID="SqlDataSourcearticoli" EnableModelValidation="True"
BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px"
CellPadding="4" ForeColor="Black" GridLines="Vertical"
Font-Size="11pt" AutoGenerateColumns="False"
DataKeyNames="codice" Width="770px" CssClass="testo_sx"
AlternatingRowStyle-BackColor="#99FF33" AllowPaging="True">

<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="codice" HeaderText="Codice" >
<ControlStyle Width="50px" />
</asp:BoundField>
<asp:BoundField DataField="descrizione" HeaderText="Descrizione" >
<ControlStyle Width="300px" />
</asp:BoundField>
<asp:BoundField DataField="qxc" HeaderText="QxC" >
<ControlStyle Width="30px" CssClass="testo_centro" />
<ItemStyle CssClass="testo_centro" />
</asp:BoundField>
<asp:TemplateField HeaderText="Quantità" >
<ItemTemplate>
<table style="width:100px;">
<tr>
<td>
<aspX:NumericUpDownExtender ID="numericQTA" Minimum="0" Maximum="9999" runat="server" TargetButtonDownID="BTN_qM" TargetButtonUpID="BTN_qP" TargetControlID="txt_qta">
</aspX:NumericUpDownExtender>
<asp:TextBox ID="txt_qta" runat="server" Width="30" BorderColor="Black" CssClass="testo_centro" Text="0" />
</td>
<td>
<asp:ImageButton ID="BTN_qP" runat="server" Width="28" Height="28" ImageUrl="~/Template/piu.png" />
</td>
<td>
<asp:ImageButton ID="BTN_qM" runat="server" Width="28" Height="28" ImageUrl="~/Template/meno.png" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Omaggi" >
<ItemTemplate>
<table style="width:100px;">
<tr>
<td>
<aspX:NumericUpDownExtender ID="numericQTAO" Minimum="0" Maximum="9999" runat="server" TargetButtonDownID="BTN_OM" TargetButtonUpID="BTN_OP" TargetControlID="txt_qtao">
</aspX:NumericUpDownExtender>
<asp:TextBox ID="txt_qtao" runat="server" Width="30" BorderColor="Black" CssClass="testo_centro" Text="0" />
</td>
<td>
<asp:ImageButton ID="BTN_OP" runat="server" Width="28" Height="28" ImageUrl="~/Template/piu.png" />
</td>
<td>
<asp:ImageButton ID="BTN_OM" runat="server" Width="28" Height="28" ImageUrl="~/Template/meno.png" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sc%">
<ItemTemplate>
<asp:TextBox ID="Txt_sc1" runat="server" Width="30" Text="0" CssClass="testo_DX"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sc%">
<ItemTemplate>
<asp:TextBox ID="Txt_sc2" runat="server" Width="30" Text="0" CssClass="testo_DX"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ScV">
<ItemTemplate>
<asp:TextBox ID="Txt_scV" runat="server" Width="30" Text="0" CssClass="testo_DX"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Al %" Visible="False">
<ItemTemplate>
<asp:Label ID="lblaliquota" runat="server" Text='<%# Bind("aliquota") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="60px" />
<ItemStyle CssClass="testo_centro" />
</asp:TemplateField>
<asp:BoundField DataField="imballo" HeaderText="Imballo" Visible="False" >
<ItemStyle CssClass="testo_centro" />
</asp:BoundField>
<asp:TemplateField HeaderText="CC" Visible="False">
<ItemTemplate>
<asp:Label ID="lblcauzione" runat="server" Text='<%# Bind("cauzione") %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="testo_centro" />
</asp:TemplateField>
<asp:TemplateField HeaderText="GR" Visible="False">
<ItemTemplate>
<asp:Label ID="lblgrsconti" runat="server" Text='<%# Bind("gr_sconti") %>'></asp:Label>
</ItemTemplate>

<ControlStyle Width="1px" />
<ItemStyle CssClass="testo_centro" />
</asp:TemplateField>
<asp:CommandField ButtonType="Image" SelectImageUrl="~/Template/dettagli.png"
ShowSelectButton="True" HeaderText="Dett.">
<ControlStyle Height="28px" Width="28px" />
</asp:CommandField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="aggiungi"
ImageUrl="~/Template/Ordina.png" CommandArgument='<%# DataBinder.Eval(Container,"RowIndex") %>'
Width="28" Height="25" />
</ItemTemplate>
</asp:TemplateField>


</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#008000" Font-Bold="True" ForeColor="White" Font-Size="10" />
<PagerSettings Mode="NextPrevious"
NextPageImageUrl="~/Template/next.png"
PreviousPageImageUrl="~/Template/back.png" />
<PagerStyle BackColor="#DBFFCE" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="#CCFF99" />
<SelectedRowStyle BackColor="#006600" Font-Bold="True" ForeColor="White" />

</asp:GridView>
Non sarà quello il problema del rallentamento.. però non mettere un intero datatable in sessione... rifai la query sul db al massimo... e analogamente non fare il redirect su OnRowDataBound ma al max al momento del databind...

Ormai programmano tutti... ma la professionalità appartiene a pochi
session("opzioni") non è enorme
contiene le informazioni del ruolo utente

ho provato a fare come dici tu
però ho nascosto direttamente la colonna anzichè
disabilitare i singoli campi
ovviamente sul databing della gridview.

è un pò più veloce però credo ancora si possa migliorare

semmai ti disturbo ancora!

Grazie
Un' ultima cosa

è possibile tramite query SQL recuperare per esempio
le prime 10 righe o le righe da 11 a 20
o da 101 a 110 ?

in modo da crearmi una paginazione manuale che mi restituisca
pochi dati alla volta?
si, trattasi di paginazione sql (ed è consigliabile farlo per tabelle con grandi moli di dati). Anche la select * è sconsigliata e dovresti tirar su solo i dati di interesse. Per la paginazione sql ti rimando a google :D

Ormai programmano tutti... ma la professionalità appartiene a pochi

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.