ASP.NET Caching - Data Source Controls

SqlDataSource, ObjectDataSource e XmlDataSource supportano nativamente il caching.

Usare il caching con questi controlli è altamente consigliato, perchè ad ogni postback la sorgente dati viene richiesta.
In più i dati vengono richiesti per ogni controllo in bound, quindi se avremo 3 controlli in bound, ad ogni refresh, partiranno 3 query.

In questo caso mettendo in cache questi dati si ridurranno drasticamente i tempi di caricamento.

Questi controlli offrono un insieme di proprietà utili per attivare comodamente la cache:

  • EnableCaching: true per attivare il caching.
  • CacheExpirationPolicy: può essere di due tipi Absolute o Sliding (guardare i post precedenti per capire cosa si intende)
  • CacheDuration: Se la CacheExpirationPolicy è settata su Absolute, il controllo memorizzerà i dati in cache alla prima operazione e li mantiene in memoria per il periodo di tempo specificato, quindi viene cancellata e aggiornata all'operazione successiva.
    Se invece è impostata su Sliding i dati vengono memorizzati durante la prima operazione di recupero dati, e ripristina l'intervallo di tempo durante il quale i dati vengono mantenuti nella cache per ogni operazione successiva.
    La cache scadrà se non viene registrata alcuna attività per un periodo di tempo uguale al valore settato nella CacheDuration.
  • CacheKeyDependency - SqlCacheDependency: Permette di creare una dipendenza da un oggetto in cache ad un'altro (CacheKeyDependency) o con una tabella nel database (SqlCacheDependency).

SqlDataSource

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>" 
        EnableCaching="true"
        CacheDuration="600"
        CacheExpirationPolicy="Absolute"
        SelectCommand="SELECT * FROM Person.Contact">
        <SelectParameters>
            <asp:Parameter DefaultValue="1" Name="EmailPromotion" Type="Int32" />
        </SelectParameters>
    </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" 
            DataSourceID="SqlDataSource1">
        </asp:GridView>

Per questo esempio ottengo tutti i dati dalla tabella Person.Contact del database AdventureWorks che potete trovare su CodePlex.

Test alla mano, ottenuti con Fiddler, la differenza tra i dati non copiati in cache e quelli copiati in cache è del 10% di tempo impiegato tra la request e il respond.

ObjectDataSource

L'ObjectDataSource è molto limitato, lavora solamente DataSet e/o DataTable.
Se utilizzato con un'altro tipo di oggetto riceveremo un NotSupportedException.

Se si vorranno copiare nell'ObjectDataSource cache oggetti diversi dai due sopra menzionati, bisognerà implementare anche i metodi di inserimento dei dati.

posted @ sabato 3 gennaio 2009 20:19

Print

Comments on this entry:

# re: ASP.NET Caching - Data Source Controls

Left by paymdxtolls at 10/09/2018 21:39
Gravatar
The license plate data provides the needed information to obtain the registered owner’s address so an MDX Toll-By-Plate account can be created and a notice generated.
Comments have been closed on this topic.