Appfabric缓存大小

时间:2013-12-30 12:23:42

标签: c# caching appfabric

我有一个250,000行的表全部被选中作为List缓存;缓存到appfabric时,这个表需要大约5.6 GB om ram,这是正常的吗?有没有其他方法来减小尺寸?什么是这种挑战的最佳方法。

1 个答案:

答案 0 :(得分:1)

对象以序列化形式存储在缓存中。因此,要了解缓存大小,您只需计算序列化对象大小。

AppFabric在将项目存储在缓存中之前使用NetDataContractSerializer类进行序列化。因此,确定对象大小,将检测/调试代码添加到序列化对象的应用程序/单元测试中,并记录其序列化大小。

标准方法是

// requires following assembly references:
//
//using System.Xml;
//using System.IO;
//using System.Runtime.Serialization;
//using System.Runtime.Serialization.Formatters.Binary;
//
// Target object “obj”
//
long length = 0;

MemoryStream stream1 = new MemoryStream();
using (XmlDictionaryWriter writer = 
    XmlDictionaryWriter.CreateBinaryWriter(stream1))
{
    NetDataContractSerializer serializer = new NetDataContractSerializer();
    serializer.WriteObject(writer, obj);
    length = stream1.Length; 
}

if (length == 0)
{
    MemoryStream stream2 = new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(stream2, obj);
    length = stream2.Length;
}
// do somehting with length

你说

  

我有一个250,000行的表全部被选中作为List缓存   有时您必须使用不同的存储格式:例如,您不能使用datatable / dataset,因为它们非常低效。要减少高速缓存大小,请优化序列化格式。