Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    mettere nella cache un DataTable per un tempo indefinito

    Ho un DataTable, praticamente non modificabile (elenco comuni) e vorrei metterlo in una variabile globale.
    E' meglio variabile application o cache? :master:

    Nel caso della cache, che codice utilizzare per inserire questo oggetto senza limiti di tempo? :master:

    ciao
    Pietro

  2. #2
    Con la cache:
    codice:
    public DataTable Comuni {
     get {
        DataTable comuni = null;
        if(HttpContext.Current.Cache["Comuni"] != null) {
          comuni = (DataTable)HttpContext.Current.Cache["Comuni"];
        }
        else {
          comuni = TuaSorgenteData.GetComuni();
          HttpContext.Current.Cache.Insert("Comuni", comuni);
        }
     }
    }
    Con Application dovresti semplicemente utilizzare HttpContext.Current.Application al posto di Cache, ricorda di fare "Lock" ed "UnLock" prima e dopo l'inserimento dei dati all'interno di questo contenitore.
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Bene, ti ringrazio
    Pietro

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Scusami ma mi piacerebbe conoscere il tuo parere

    Tu useresti la cache o Application?

    Pietro

  5. #5
    Considerando il fatto che la risorsa è globale, cioè utile all'intero ciclo di vita dell'applicazione e non avendo questa eventi che ne possano modificare il contenuto, io avrei utilizzato il contenitore Application

    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  6. #6
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    io mi sono fatto spesso questa domanda e nn ho capito se ogni volta che uso una variabile Apllication devo controllare se questa esista ... in altre parole mi chiedo se il global.asax mi garantisca che le variabili che vi istanzio dentro esistano.. nella mia ignoranza uso un singleton per ovviare . voi sapete come funziona questa cosa?

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da RoBYCoNTe
    Considerando il fatto che la risorsa è globale, cioè utile all'intero ciclo di vita dell'applicazione e non avendo questa eventi che ne possano modificare il contenuto, io avrei utilizzato il contenitore Application

    nell'evento Application_Start? :master:

    Pietro

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da GabbOne
    io mi sono fatto spesso questa domanda e nn ho capito se ogni volta che uso una variabile Apllication devo controllare se questa esista ... in altre parole mi chiedo se il global.asax mi garantisca che le variabili che vi istanzio dentro esistano.. nella mia ignoranza uso un singleton per ovviare . voi sapete come funziona questa cosa?
    Per mia esperienza è sempre meglio controllare in anticipo, sia qu, nel serveri, sia con javascript, nel client
    Pietro

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: mi sono ricordato che una variabile shared si comporta a tutti gli effetti come una variabile application raggiungendo prestazioni migliori.
    Pietro

  10. #10
    puoi li, come puoi estendere le proprietà di una pagina web e rendere disponibile una tua property che si occupa di questo meccanismo, come nel seguente esempio:
    codice:
    public class MyPage : System.Web.UI.Page {
        ...
        public DataTable Comuni {
            get {
                DataTable comuni = null;
                if(HttpContext.Current.Application.Get("Comuni") != null) {
                    comuni = (DataTable)HttpContext.Current.Application.Get("Comuni");
                }
                else {
                    comuni = new DbContext().GetComuni();
                    HttpContext.Current.Application.Lock();
                    HttpContext.Current.Application.Add("Comuni", comuni);
                    HttpContext.Current.Application.Unlock();
                }         
                return comuni;
            }
        }
    }
    In questo modo, quando la risorsa viene richiesta, la prima volta viene caricata, nelle richieste successive viene fornito il dato presente nel contenitore Application.
    La cosa più importante è quella che ho messo in grassetto, Lock ed UnLock per preservare il contenuto di Application.

    Spero di essere stato d'aiuto!
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.