Кэширование AppFabric - Правильное использование DataCacheFactory и DataCache

Я ищу наиболее эффективный способ организовать использование кэша данных и фабрики кеширования данных для вызовов кэширования AppFabric, так как на загрузку страницы приходится от 400 до 700 кешей (и почти без всяких операций). Кажется, что лучше всего использовать одну статическую DataCacheFactory (или, возможно, пару в циклической настройке).

Должен ли я вызывать GetCache ("cacheName") для каждого запроса объекта DataCache, или я должен сделать один статический во время инициализации фабрики DataCache и использовать ее для всех вызовов?

Должен ли я обрабатывать исключения, Создание одной DataCacheFactory (singleton) более эффективно, чем создание нескольких DataCacheFactory. вам не следует создавать DataCacheFactory для каждого вызова, это снизит производительность "

" Попробуйте инкапсулировать алгоритм циклического перебора (имеющий 3/4/5 заводских экземпляров) в своем синглтоне и сравните результаты нагрузочного теста. "

http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx

«Вы можете увеличить количество клиентов, чтобы увеличить пропускную способность кеша. Но иногда, если вы хотите иметь меньший набор клиентов и увеличить пропускную способность, уловка заключается в использовании нескольких экземпляров DataCacheFactory. Экземпляр DataCacheFactory создает соединение с серверами (например, если есть 3 сервера, он создаст 3 соединения) и мультиплексирует все запросы от кэшей данных на эти соединения. Поэтому, если объем ввода / вывода очень велик, эти TCP-соединения могут оказаться узкими местами. Таким образом, один из способов - создать несколько экземпляров DataCacheFactory, а затем использовать операции с ними ».


Вот что уже используется ... свойство вызывается, и если возвращаемое значение не равно нулю, выполняется операция.

private static DataCache Cache
{
    get
    {
        if (_cacheFactory == null)
        {
            lock (Sync)
            {
                if (_cacheFactory == null)
                {
                    try
                    {
                        _cacheFactory = new DataCacheFactory();
                    }
                    catch (DataCacheException ex)
                    {
                        if (_logger != null)
                        {
                            _logger.LogError(ex.Message, ex);
                        }
                    }
                }
            }
        }

        DataCache cache = null;

        if (_cacheFactory != null)
        {
            cache = _cacheFactory.GetCache(_cacheName);
        }

        return cache;
    }
}

] См. Этот вопрос на форуме Microsoft AppFabric: http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f

33
задан CRice 23 May 2011 в 23:47
поделиться