Разные хеш-таблицы cacheItem с одинаковыми значениями данных или отдельные cacheItems для каждого значения данных - какой эффективный подход?
У меня есть два различных класса требований к кешированию данных в зависимости от размера данных: 1) очень маленькие данные (2-30 символов) - это включает в себя такие вещи, как код типа для данного entityId. Система основана на концепции иерархии родительских и дочерних объектов, и действия разрешаются для значений, которые строятся в сочетании с кодом типа объекта. Кэширование этих кодов типов для разных сущностей экономит время при извлечении из базы данных. 2) средние / большие данные - это общие данные, такие как описание продуктов и страниц.
Я не понимаю, какой подход лучше подходит для данных первого класса. Я могу кешировать это так:
HttpRuntime.Cache.Insert("typeCode" + entityId, entityTypeCode);
или вот так:
Dictionary<int, string> etCodes =
(Dictionary<int, string>)HttpRuntime.Cache["typeCode"];
etCodes[entityId] = entityTypeCode;
Ясно, что во втором подходе я экономлю на ненужных элементах кэша для каждого entityId. или, если объект Cache заполнен несколькими элементами такого маленького размера, это нормально.
Какой из этих подходов хорош с точки зрения производительности и накладных расходов?
1 ответ
Лично я бы использовал ваш второй подход к одному объекту и использовал бы пользовательский объект вместо Dictionary
,
Это позволило бы мне позже контролировать больше аспектов, таких как истечение срока действия элементов в объекте или изменение реализации.
Я бы сделал это примерно так:
public class MyCacheObject
{
public static MyCacheObject
{
get
{
// ...Omitted locking here for simplification...
var o = HttpRuntime.Cache["MyCacheObject] as MyCacheObject;
if ( o = null )
{
o = new MyCacheObject();
HttpRuntime.Cache["MyCacheObject] = o;
}
return o;
}
}
public object GetEntity( string id, string code )
{
// ...
}
public void SetEntity( object entity, string id, string code )
{
// ...
}
// ...
}
Если у вас есть обычный базовый класс для сущностей, GetEntity
а также SetEntity
методы могут быть оптимизированы в дальнейшем.