Подтвердить что ты не робот

Поддержка кэширования .NET 4

Я понимаю, что в .NET 4 Framework встроена поддержка кэширования. Кто-нибудь имеет какой-либо опыт в этом или может предоставить хорошие ресурсы, чтобы узнать больше об этом?

Я имею в виду кэширование объектов (сущностей в основном) в памяти и, возможно, использование System.Runtime.Caching.

4b9b3361

Ответ 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

Ниже ссылка хорошая отправная точка: Здесь