[英]Does C#/.Net MemoryCache class need to serialize/deserialize objects
在诸如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);
}
我无法在文档中立即找到任何明确说明对象是否已序列化的内容,除非这就是所谓的“对象缓存”。 实际上,对象不是序列化的 ,而是按原样保留在内存中。
您可以通过阅读参考源来验证此行为。 尽管当前的实现方式不能保证将来的行为,但将实现方式更改为使用序列化可能会以很多方式破坏事物,我认为可以肯定地说它不会改变。
相关参考源链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.