我有一个250,000行的表全部被选中作为List缓存;缓存到appfabric时,这个表需要大约5.6 GB om ram,这是正常的吗?有没有其他方法来减小尺寸?什么是这种挑战的最佳方法。
答案 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,因为它们非常低效。要减少高速缓存大小,请优化序列化格式。