Condividi tramite


Memorizzazione di dati nella cache mediante controlli origine dati

Aggiornamento: novembre 2007

I controlli origine dati forniscono servizi dati ai controlli con associazione a dati quali i controlli GridView, FormView e DetailsView. Tali servizi includono la memorizzazione di dati nella cache per migliorare le prestazioni delle applicazioni in cui i dati non vengono modificati di frequente.

Per memorizzare i dati nella cache utilizzando il controllo SqlDataSource o AccessDataSource, è necessario impostarne la proprietà DataSourceMode su DataSet. Il controllo ObjectDataSource può memorizzare nella cache gli oggetti restituiti dall'oggetto business sottostante. Non memorizzare nella cache oggetti che contengono risorse o che gestiscono uno stato che non può essere condiviso tra più richieste, ad esempio un oggetto DataReader aperto.

Attivazione della memorizzazione nella cache con un controllo origine dati

Per impostazione predefinita, la memorizzazione nella cache non è attivata per i controlli origine dati ma è possibile attivarla impostando la proprietà EnableCaching del controllo su true. I dati memorizzati nella cache vengono aggiornati in base al numero di secondi specificati mediante la proprietà CacheDuration.

È possibile ridefinire ulteriormente il comportamento della memorizzazione nella cache di un controllo origine dati impostandone la proprietà CacheExpirationPolicy. Mediante l'impostazione del valore della proprietà su Absolute si forza l'aggiornamento della cache una volta trascorso il valore di CacheDuration. Impostando la proprietà CacheExpirationPolicy su Sliding si aggiorna la cache solo se è trascorso il valore di CacheDuration dall'ultimo accesso a un elemento della cache.

Nota importante:

È consigliabile impostare la proprietà EnableCaching su false quando la rappresentazione del client è attivata e i risultati dell'origine dati vengono recuperati in base all'identità del client. Se la memorizzazione nella cache è attivata, i dati memorizzati nella cache per un singolo utente possono essere visualizzati da tutti gli utenti ed è possibile che le informazioni riservate vengano esposte a un'origine non desiderata. La rappresentazione del client viene attivata quando l'attributo impersonate dell'elemento di configurazione identity è impostato su true e l'identificazione anonima è disattivata per l'applicazione sul server Web.

Nell'esempio di codice riportato di seguito viene illustrato un controllo SqlDataSource configurato per aggiornare i dati ogni 20 secondi.

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </Columns>
            </asp:GridView>

        </form>
    </body>
</html>

Scenari avanzati di memorizzazione nella cache

Se si utilizza il controllo SqlDataSource con il provider System.Data.SqlClient, è possibile utilizzare la classe SqlCacheDependency per garantire che i dati memorizzati nella cache vengano aggiornati solo in seguito alla modifica della tabella di origine nel database. Per ulteriori informazioni, vedere Inserimento dei dati nella cache con il controllo SqlDataSource.

Vedere anche

Altre risorse

Controlli server Web dell'origine dati