为什么MemoryCache使用浅拷贝?

时间:2017-01-23 12:15:04

标签: c# deep-copy 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

1 个答案:

答案 0 :(得分:1)

是什么让你觉得MemoryCache使用浅拷贝?

AFAIK它只存储您传入的对象,并且不进行任何复制。

因此,如果您之后对该对象进行了更改,那些更改也会影响缓存对象(因为它们是同一个对象)。显然这可能会导致问题,特别是如果你不知道它正在发生。

你可以编写自己的缓存类,它可以复制和缓存 - 然后你需要在浅层和深层之间做出决定。