none
Duda con Cache.Insert RRS feed

  • Pregunta

  • Hola.

    Trabajo en un proyecto utilizando ASP.NET con C#, utilizo WebForms y mi pregunta es esta, cuando utilizo este codigo para crear una cache de datos la primera vez que un usuario carga una pagina desde el evento Load de la pagina:

    protected void Page_Load(object sender, EventArgs e)
            {
                DateTime timeStart = DateTime.Now;
                if (!IsPostBack)
                {
                    ReloadAndCacheCustomers();

    y el codigo del metodo ReloadAndCacheCustomers()

    private void ReloadAndCacheCustomers()
            {
                // Read connection string from web.config file
                string CS = ConfigurationManager.ConnectionStrings["StoreConnectionString"].ConnectionString;
     
                lock (thisLock)
                {
                    using (SqlConnection con = new SqlConnection(CS))
                    {
                        SqlDataAdapter da = new SqlDataAdapter("spGetCustomers", con);
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;
                        DataSet ds = new DataSet();
                        da.Fill(ds);
     
                        CacheItemRemovedCallback onCacheItemRemoved = new CacheItemRemovedCallback(CacheItemRemovedCallbackMethod);
     
                        // Build SqlCacheDependency object using the database and table names
                        SqlCacheDependency sqlDependency = new SqlCacheDependency("Store", "Customers");
     
                        // Pass SqlCacheDependency object, when caching data
                        Cache.Insert("CustomersData", ds, sqlDependency, DateTime.Now.AddHours(24), Cache.NoSlidingExpiration,
                        CacheItemPriority.Default, onCacheItemRemoved);
     
                        GridView1.DataSource = ds;
                        GridView1.DataBind();
                    }
                }
            }
    lo que quiero saber es si la informacion que guarde en cache de datos(el dataset) estara disponible solo para un usuario o estarádisponible para todos los usuarios que accedan a la pagina?


    pabletoreto

    viernes, 6 de noviembre de 2015 16:13

Respuestas

  • hola

    deberias validar contra el cache si existe el dato, pero no se trabaja de esa forma donde datos y controles esta todos junto

    protected void Page_Load(object sender, EventArgs e)
    {
    	DateTime timeStart = DateTime.Now;
    	if (!IsPostBack)
    	{
    		GridView1.DataSource = GetCustomers();
    		GridView1.DataBind();
    	}
    		
    }
    
    
    
    private DataTable GetCustomers()
    {
    	DataTable dt = Cache["CustomersData"] as DataTable;
    	
    	if(dt != null)
    		return dt;
    	
    	string CS = ConfigurationManager.ConnectionStrings["StoreConnectionString"].ConnectionString;
    
    	using (SqlConnection con = new SqlConnection(CS))
    	{
    		SqlDataAdapter da = new SqlDataAdapter("spGetCustomers", con);
    		da.SelectCommand.CommandType = CommandType.StoredProcedure;
    		DataTable dt = new DataTable();
    		da.Fill(dt);
    
    		CacheItemRemovedCallback onCacheItemRemoved = new CacheItemRemovedCallback(CacheItemRemovedCallbackMethod);
    
    		// Build SqlCacheDependency object using the database and table names
    		SqlCacheDependency sqlDependency = new SqlCacheDependency("Store", "Customers");
    
    		// Pass SqlCacheDependency object, when caching data
    		Cache.Insert("CustomersData", dt, sqlDependency, DateTime.Now.AddHours(24), Cache.NoSlidingExpiration,
    		CacheItemPriority.Default, onCacheItemRemoved);
    
    		return dt;
    	}
    	
    }

    validas si el dato esta en la cache, si esta lo devuelves de alli

    sino accedes a la db

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta pabletoreto viernes, 6 de noviembre de 2015 17:00
    viernes, 6 de noviembre de 2015 16:31