Почему MemoryCache использует мелкую копию?
Мне просто интересно, почему MemeoyCache использует мелкую копию для хранения данных кэша? любое предложение? Если memoryCache использовать только ссылку на данные, то какой тип хранилища данных в CacheMemory.
public static void TestmemoryCacheCloning()
{
var memoryCache = new MemoryCache("Test");
var employee = new Employee
{
EmployeeId = 1,
Name = "A",
Aaddress = new Aaddress
{
City = "Delhi",
State = "Delhi",
Country = "India"
}
};
memoryCache.Add("Test", employee, DateTimeOffset.Now.AddDays(1));
Console.WriteLine(employee.GetHashCode());
var output = memoryCache.Get("Test");
Console.WriteLine(output.GetHashCode());
}
Выход:
49496962
49496962
1 ответ
Что заставляет вас думать, что MemoryCache использует поверхностную копию?
AFAIK он просто хранит объект, который вы передаете, и не выполняет никакого копирования.
Таким образом, если вы вносите изменения в этот объект впоследствии, эти изменения также влияют на кэшированный объект (потому что это один и тот же объект). Очевидно, что это может вызвать проблемы, особенно если вы не знаете, что это происходит.
Вы можете написать свой собственный класс кеша, который делает копию и кеширует это - тогда вам придется выбирать между мелким и глубоким.