Поддержка .NET 4 Caching - PullRequest
32 голосов
/ 12 мая 2011

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

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

Ответы [ 5 ]

27 голосов
/ 12 мая 2011

Я предполагаю, что вы получаете на это , System.Runtime.Caching, аналогично System.Web.Caching и в более общем пространстве имен.

См. http://deanhume.com/Home/BlogPost/object-caching----net-4/37

и в стеке

кэширование зависит от типа в системном кэшировании во время выполнения и,

производительность системного кэширования во время выполнения .

Может быть полезно.

15 голосов
/ 12 мая 2011

Я сам этим не пользовался, но если вы просто кэшируете простые объекты в памяти, вы, вероятно, ссылаетесь на класс 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.

5 голосов
/ 30 мая 2016

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)

2 голосов
/ 12 мая 2011

Надеюсь, вы имеете в виду System.Runtime.Caching в .Netframework 4.0

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

0 голосов
/ 12 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...