在将一个数据表之类的内容存储在其中之后,是否可以获得Session对象的大小(以字节为单位)?
我想获得特定Session对象的大小,例如Session [“table1”],而不是整个Session集合,所以另一个问题虽然有用,但并不是很重复。
答案 0 :(得分:5)
您可以使用编组来创建对象的副本,这将为您提供有关其使用的内存量的近似数字。
但是,一如既往,无法准确了解内存使用情况。 DataTable对象不是您可以测量的单个固体内存块。它包含很多对象,并且它们之间有引用,并且可能有多个对同一对象的引用,这意味着对于每个对象的引用都没有对象的一个副本。例如,每个DataRow都引用了它所属的表,但这当然并不意味着每一行都有整个表的完整副本。
答案 1 :(得分:1)
您可以使用反射,请参阅this article。
您可能还需要考虑查看某些Memory Performance Counters或使用DotTrace或CLR Profiler等工具分析您的应用程序。
答案 2 :(得分:0)
也许您可以使用CLR Profiler或VSTS Profiler等外部工具进行检查。
答案 3 :(得分:0)
这是从问题中第一条评论的“duplicate question”开始逐行进行的。
int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;