【问题标题】:Memory consumption in CF vs Full FrameworkCF 与完整框架中的内存消耗
【发布时间】:2011-05-13 21:41:47
【问题描述】:

我想知道 Full Framework 和 Compact Framework 的内存消耗是否不同,因为两者之间兼容的类型和类。 我还想知道我是否针对紧凑框架(.dll 库)的程序集,并在台式机中引用它。它会使用完整框架或紧凑框架中的类型吗?如果是后者,我认为内存消耗应该是相同的,但是是吗? 我的直觉是紧凑的框架类型更简单,因为它们通常具有较少的方法,并且缺少许多类。但是每个对象的内存表示是否相同?这取决于架构吗? (例如在 ARM 与 x86 上运行它) 是否有资源可以让我找到有关此主题的更多信息?

【问题讨论】:

    标签: .net compact-framework memory-management


    【解决方案1】:

    我想说这在很大程度上取决于您正在查看的具体内容。例如,如果我有一个简单的对象:

    public class Foo
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    

    那么它的内存表示在任一框架下都是相同的。

    但是,如果我从两个框架之间根本不同的更复杂的类派生出来,那么框架之间的结果就会不同。

    如果在 FFx 中加载,它将使用 FFx 程序集来实例化实例,因此即使它是为 CF 编译的,FFx 也会在 FFX 运行时而不是 CF 下加载它。

    处理器架构无关紧要,因为这些都编译为与处理器无关的 IL。

    当然,既然您是在讨论托管代码下的内存消耗,那么 GC 的工作方式也是一个重要因素,它们在 CF 和 FFx 中的工作方式不同,因此随着时间的推移,相同类的占用空间可能会有所不同两个框架都取决于使用模式。

    【讨论】:

    • 如果类有一个字节属性而不是一个整数属性,自动生成的字段是否会在移动平台上按顺序映射出来,而不是在非边界上映射移动平台?
    • 如果第一个是一个字节,它和内存中的字符串数据之间会有一个 3 字节的“填充”。由于对非对齐访问的性能惩罚,我很惊讶整个框架并没有做同样的事情(至少我认为你是这么说的),但我从来没有真正需要仔细研究完整的框架是如何布置东西的,因为它的封送器足够强大,我很少需要手动封送东西。在 CF 中就没那么幸运了。
    • 谢谢!那讲得通。我假设它在 CF 中的消耗总是相同或更少,但在 FF 中永远不会超过。对吗?
    • “从不”太绝对了。我可能会设计一些极端情况来让 CF 占用更多空间,但我很高兴地说,FFx 占用的空间少于 CF 的情况很少见。
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2022-06-14
    • 1970-01-01
    • 2012-02-27
    • 2010-11-05
    • 2019-11-06
    • 2010-10-12
    • 1970-01-01
    相关资源
    最近更新 更多