gpt4 book ai didi

c# - C#/.Net MemoryCache类是否需要序列化/反序列化对象

转载 作者:行者123 更新时间:2023-11-30 20:19:21 25 4
gpt4 key购买 nike

在 Redis/MemCache 等缓存系统中,需要对对象进行序列化和反序列化。当存储对象时,需要序列化,而当访问该对象时,需要反序列化。

C#/.Net MemCache是​​否也需要序列化/反序列化对象?例如当我存储以下类的对象时,是否仅在缓存中设置了对象引用,或者对象在存储到缓存之前被序列化?测试表明缓存仅存储一个引用。但我想检查一下。

class CacheData
{
public int A = 0;
public int B = 0;
}

private static void TestMemoryCache()
{
CacheData origObject = new CacheData();
ObjectCache cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
cache.Set("someKey", origObject, policy);
origObject.A = 2;
origObject.B = 3;
CacheData cachedObj = cache["someKey"] as CacheData;

if (cachedObj == origObject)
Console.WriteLine("Same");
else
Console.WriteLine("Distinct");

cachedObj.A = 5555;

cachedObj = cache["someKey"] as CacheData;
Console.WriteLine("The A value is: " + cachedObj.A);


}

最佳答案

我无法立即在文档中找到任何具体说明对象是否被序列化的内容,除非他们称其为“对象缓存”就是这个意思。实际上,对象未序列化,只是按原样保存在内存中。

您可以通过阅读引用源来验证此行为。虽然当前的实现并不能保证 future 的行为,但将实现更改为使用序列化可能会在很多方面造成破坏,所以我认为可以肯定地说它不会改变。

相关引用源链接:

https://github.com/Microsoft/referencesource/blob/master/System.Runtime.Caching/System/Caching/MemoryCache.cs

https://github.com/Microsoft/referencesource/blob/master/System.Runtime.Caching/System/Caching/MemoryCacheStore.cs

关于c# - C#/.Net MemoryCache类是否需要序列化/反序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com