为什么 MemoryCache 使用浅拷贝?
Why MemoryCache use Shallow copy?
我只是想知道,为什么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
是什么让您认为 MemoryCache 使用浅拷贝?
据我所知,它只存储您传入的对象,不进行任何复制。
因此,如果您之后对该对象进行更改,这些更改也会影响缓存的对象(因为它们是同一个对象)。显然这会导致问题,特别是如果您没有意识到它正在发生。
您可以编写自己的缓存 class,创建一个副本并对其进行缓存 - 然后您需要在浅层和深层之间做出决定。
我只是想知道,为什么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
是什么让您认为 MemoryCache 使用浅拷贝?
据我所知,它只存储您传入的对象,不进行任何复制。
因此,如果您之后对该对象进行更改,这些更改也会影响缓存的对象(因为它们是同一个对象)。显然这会导致问题,特别是如果您没有意识到它正在发生。
您可以编写自己的缓存 class,创建一个副本并对其进行缓存 - 然后您需要在浅层和深层之间做出决定。