繁体   English   中英

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

[英]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);


}

我无法在文档中立即找到任何明确说明对象是否已序列化的内容,除非这就是所谓的“对象缓存”。 实际上,对象不是序列化的 ,而是按原样保留在内存中。

您可以通过阅读参考源来验证此行为。 尽管当前的实现方式不能保证将来的行为,但将实现方式更改为使用序列化可能会以很多方式破坏事物,我认为可以肯定地说它不会改变。

相关参考源链接:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM