Недавно я исследовал возможности кэширования в ASP.NET.
Я создал свой собственный "Кэш", потому что не знал ничего лучше, и выглядел он примерно так:
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;
}
}
}
Итак, значения хранятся некоторое время в синглтоне, а когда время истекает, значения обновляются. Если время не истекло, и выполняется запрос данных, то возвращаются сохраненные значения в поле.
Каковы преимущества использования настоящего метода (http://msdn.microsoft.com/en-us/library/aa478965.aspx) вместо этого?
Я думаю, что здесь применимо выражение "позвольте компьютеру сделать это, он умнее вас"-. Как и в случае с управлением памятью и другими сложными вещами, компьютер гораздо лучше осведомлен о том, что он делает, чем вы; следовательно, он может добиться большей производительности, чем вы.
В Microsoft над этим работала целая команда инженеров, и им, вероятно, удалось выжать из системы гораздо больше производительности, чем это было бы возможно для вас. Также вероятно, что встроенное кэширование ASP.NET'работает на другом уровне (недоступном для вашего приложения), что делает его намного быстрее.
Механизм кэширования ASP.NET существует уже давно, поэтому он стабилен и хорошо изучен. Существует множество ресурсов, которые помогут вам извлечь из него максимум пользы.
В зависимости от ваших требований, разработка собственного механизма может быть правильным решением.
Самое сложное в кэшировании - выбрать, что и когда безопасно кэшировать. Для приложений, в которых данные часто меняются, кэширование может привести к возникновению трудноустранимых ошибок, поэтому будьте осторожны.
Кэширование в ASP.NET обладает широкими возможностями, и вы можете настраивать кэширование достаточно детально.
В вашем случае (кэширование данных) одной из функций, которую вы упускаете, является возможность аннулировать и обновлять кэш, если данные на SQL-сервере каким-либо образом обновляются (SQL Cache Dependency).