Pergunta
Recentemente tenho investigado as possibilidades de cache no ASP.NET.
Rolei meu próprio "Cache", porque não conhecia nada melhor, ficou mais ou menos assim:
public class DataManager
{
private static DataManager s_instance;
public static DataManager GetInstance()
{
}
private Data[] m_myData;
private DataTime m_cacheTime;
public Data[] GetData()
{
TimeSpan span = DateTime.Now.Substract(m_cacheTime);
if(span.TotalSeconds > 10)
{
// Do SQL to get data
m_myData = data;
m_cacheTime = DateTime.Now;
return m_myData;
}
else
{
return m_myData;
}
}
}
Assim, os valores são armazenados por um tempo em um singleton e, quando o tempo expira, os valores são renovados.Se o tempo não tiver expirado e for feita uma solicitação dos dados, os valores armazenados no campo serão retornados.
Quais são os benefícios em relação ao uso do método real (http://msdn.microsoft.com/en-us/library/aa478965.aspx) em vez disso?
Solução
Acho que a máxima “deixe o computador fazer isso;é mais inteligente que você" se aplica aqui.Assim como o gerenciamento de memória e outras coisas complicadas, o computador está muito mais informado sobre o que está fazendo do que você;conseqüentemente, capaz de obter mais desempenho do que você.
A Microsoft teve uma equipe de engenheiros trabalhando nisso e eles provavelmente conseguiram extrair muito mais desempenho do sistema do que seria possível para você.Também é provável que o cache interno do ASP.NET opere em um nível diferente (que é inacessível ao seu aplicativo), tornando-o muito mais rápido.
Outras dicas
O mecanismo de cache do ASP.NET já existe há algum tempo, por isso é estável e bem compreendido.Existem muitos recursos disponíveis para ajudá-lo a aproveitar ao máximo.
Fazer o seu próprio pode ser a solução certa, dependendo de suas necessidades.
A parte difícil do armazenamento em cache é escolher o que é seguro armazenar em cache e quando.Para aplicativos nos quais os dados são alterados com frequência, você pode introduzir alguns bugs difíceis de solucionar com o cache, portanto, tome cuidado.
O cache no ASP.NET é rico em recursos e você pode configurar o cache de maneira bastante granular.
No seu caso (cache de dados), um dos recursos que você está perdendo é a capacidade de invalidar e atualizar o cache se os dados no servidor SQL forem atualizados de alguma forma (Dependência de cache SQL).