【问题标题】:Can I get the size of a Session object in bytes in c#?我可以在 c# 中以字节为单位获取 Session 对象的大小吗?
【发布时间】:2009-11-09 19:01:37
【问题描述】:

是否可以在 Session 对象中存储数据表等内容后获取其大小(以字节为单位)?

我想获取特定 Session 对象的大小,例如 Session["table1"],而不是整个 Session 集合,所以另一个问题虽然有帮助,但并不完全重复。

【问题讨论】:

标签: c# asp.net session


【解决方案1】:

您可以使用编组来创建对象的副本,这将为您提供有关它使用多少内存的大致数字。

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

【讨论】:

    【解决方案2】:

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

    您可能还想考虑查看一些Memory Performance Counters,或者使用DotTraceCLR Profiler 等工具分析您的应用程序。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这几乎是从问题中第一条评论的“duplicate question”中逐行提取的。

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

        【讨论】:

        • 序列化添加了很多元数据,这些元数据包含在大小中。
        • 我同意。以编程方式获取对象的大小并不容易。我给出的方法充其量只是一个粗略的估计,最坏的情况是被过度夸大了。
        猜你喜欢
        • 2017-12-18
        • 2016-04-08
        • 2014-01-27
        • 2010-09-17
        • 2010-11-10
        • 2013-02-01
        • 2011-03-26
        相关资源
        最近更新 更多