我可以在c#中以字节为单位获取Session对象的大小吗?

时间:2009-11-06 17:20:19

标签: c# asp.net session

在将一个数据表之类的内容存储在其中之后,是否可以获得Session对象的大小(以字节为单位)?

我想获得特定Session对象的大小,例如Session [“table1”],而不是整个Session集合,所以另一个问题虽然有用,但并不是很重复。

4 个答案:

答案 0 :(得分:5)

您可以使用编组来创建对象的副本,这将为您提供有关其使用的内存量的近似数字。

但是,一如既往,无法准确了解内存使用情况。 DataTable对象不是您可以测量的单个固体内存块。它包含很多对象,并且它们之间有引用,并且可能有多个对同一对象的引用,这意味着对于每个对象的引用都没有对象的一个​​副本。例如,每个DataRow都引用了它所属的表,但这当然并不意味着每一行都有整个表的完整副本。

答案 1 :(得分:1)

您可以使用反射,请参阅this article

您可能还需要考虑查看某些Memory Performance Counters或使用DotTraceCLR Profiler等工具分析您的应用程序。

答案 2 :(得分:0)

也许您可以使用CLR ProfilerVSTS Profiler等外部工具进行检查。

答案 3 :(得分:0)

这是从问题中第一条评论的“duplicate question”开始逐行进行的。

int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;