Мне просто интересно, почему MemeoyCache использует мелкую копию для хранения данных кеша? любое предложение? Если memoryCache использует только ссылку на данные, какой тип данных хранится в CacheMemory.Почему MemoryCache использует неглубокую копию?
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
Какая польза от глубокой копии? Это приведет только к избыточности и, вероятно, к ошибкам. Что делать, если вы изменили имя employee.Name после кэширования, какое имя будет правильным? –
Метод GetHashCode не должен использоваться для определения ссылочного равенства .. использовать object.ReferenceEquals .. hashcode должен быть одинаковым, если экземпляры должны считаться равными, то есть по значению. Кроме того, факт, что 2 хэш-кода равны, не означает, что экземпляры можно считать одинаковыми, только если хэш-коды не равны, то экземпляры можно считать не равными – MaLio
Независимо от того, использует ли MemoryCache мелкие копии, используя ' GetHashCode() ', чтобы доказать, что два объекта имеют одну и ту же ссылку, недействительны. –