Поддержка кэширования .NET 4
Я понимаю, что в .NET 4 Framework встроена поддержка кэширования. Кто-нибудь имеет какой-либо опыт в этом или может предоставить хорошие ресурсы, чтобы узнать больше об этом?
Я имею в виду кэширование объектов (сущностей в основном) в памяти и, возможно, использование System.Runtime.Caching.
Ответы
Ответ 1
Я предполагаю, что вы получаете this, System.Runtime.Caching
, аналогично System.Web.Caching
и в более общем пространстве имен.
См. http://deanhume.com/Home/BlogPost/object-caching----net-4/37
и в стеке,
is-there-some-sort-of-cachedependency-in-system-runtime-caching и
performance-of-system-runtime-caching.
Может быть полезно.
Ответ 2
Я не использовал его сам, но если вы просто кешируете простые объекты в памяти, вы, вероятно, ссылаетесь на класс MemoryCache, в пространстве имен System.Runtime.Caching. Существует небольшой пример того, как использовать его в конце страницы.
Изменить: чтобы он выглядел так, будто я на самом деле проделал определенную работу для этого ответа, вот образец с этой страницы!:)
private void btnGet_Click(object sender, EventArgs e)
{
ObjectCache cache = MemoryCache.Default;
string fileContents = cache["filecontents"] as string;
if (fileContents == null)
{
CacheItemPolicy policy = new CacheItemPolicy();
List<string> filePaths = new List<string>();
filePaths.Add("c:\\cache\\example.txt");
policy.ChangeMonitors.Add(new
HostFileChangeMonitor(filePaths));
// Fetch the file contents.
fileContents =
File.ReadAllText("c:\\cache\\example.txt");
cache.Set("filecontents", fileContents, policy);
}
Label1.Text = fileContents;
}
Это интересно, потому что это показывает, что вы можете применять зависимости к кешу, как в классическом кэше ASP.NET. Большая разница здесь в том, что у вас нет зависимости от сборки System.Web.
Ответ 3
MemoryCache в каркасе - это хорошее место для начала, но вы также можете рассмотреть LazyCache, поскольку он имеет более простой API, чем кэш памяти и имеет встроенную блокировку, а также некоторые другие приятные функции. Он доступен для nuget: PM> Install-Package LazyCache
// Create our cache service using the defaults (Dependency injection ready).
// Uses MemoryCache.Default as default so cache is shared between instances
IAppCache cache = new CachingService();
// Declare (but don't execute) a func/delegate whose result we want to cache
Func<ComplexObjects> complexObjectFactory = () => methodThatTakesTimeOrResources();
// Get our ComplexObjects from the cache, or build them in the factory func
// and cache the results for next time under the given key
ComplexObject cachedResults = cache.GetOrAdd("uniqueKey", complexObjectFactory);
Недавно я написал эту статью о начале работы с кешированием в dot net, который вам может пригодиться.
(Отказ от ответственности: я являюсь автором LazyCache)
Ответ 4
Надеюсь, вы имеете в виду System.Runtime.Caching.Netframework 4.0
Ниже ссылка хорошая отправная точка:
Здесь
Ответ 5
Статья MSDN "Кэширование ASP.NET: методы и лучшие практики" - отличное начало.