我正在构建一个运行后台任务的WP8(ScheduledAgent)。当任务运行时,它从隔离存储加载使用protobuf序列化的对象图。类模型由大约10个类组成,其中包含头对象User,其中包含其他类实例的列表。不是一个微不足道的模型,但不是过于复杂。
我的问题是,在图表恢复时,我的大部分分配内存都被消耗了(计划任务的大约1 MB限制)。我把主要罪魁祸首缩小为protobuf本身。我假设关于类模型的运行时元信息占用了大部分内存,但调用FlushPool似乎没有任何帮助。
恢复空对象图消耗的内存与完全加载的对象大致相同。我正在寻找任何可能的方法清除protobuf内部保存的所有内存引用,然后调用GC.Collect,希望恢复到足以完成实际工作。有什么不同的FlushPool()?
由于
答案 0 :(得分:0)
任何额外的开销都可能来自“完整”构建的反射和元编程方面。好消息是,如果是这样的话:您可以通过使用precompiler将所有元编程移动到构建步骤来删除所有这些内容。为了确保您不包含任何元编程代码,您可以使用生成的序列化程序集使用“CoreOnly”构建。