Ami*_*mit 2 .net c# serialization
在诸如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);
}
Run Code Online (Sandbox Code Playgroud)
我无法立即在文档中找到任何具体说明对象是否已序列化的内容,除非这就是将其称为"对象缓存"的含义.实际上,对象不是序列化的,而是按原样保存在内存中.
您可以通过阅读参考源来验证此行为.虽然当前的实现不是未来行为的保证,但改变实现以使用序列化可能会在很多方面破坏事物,我认为可以安全地说它不会改变.
相关参考源链接: