【发布时间】:2011-12-18 21:15:20
【问题描述】:
相关背景资料
我已经构建了一个可以通过配置文件进行自定义的小软件。配置文件被解析并翻译成嵌套的环境结构(例如 .HIVE$db = an environment, .HIVE$db$user = "Horst", .HIVE$db$pw = "my password", .HIVE$regex$ date = 一些日期的正则表达式等)
我已经构建了可以处理这些嵌套环境的例程(例如,查找值“db/user”或“regex/date”,更改它等)。问题是配置文件的初始解析需要很长时间,并且会产生相当大的对象(实际上是三到四个,在 4 到 16 MB 之间)。所以我想“没问题,让我们通过将对象保存到 .Rdata 文件来缓存它们”。这行得通,但是“加载”缓存的对象使我的 Rterm 进程在 RAM 消耗(超过 1 GB !!)方面达到顶峰,我仍然不明白为什么(这 不当我重新“计算”对象时发生,但这正是我试图避免的,因为它需要太长时间)。
我已经考虑过序列化它,但我还没有测试它,因为我需要重构我的代码。另外,我不确定它是否会以与加载 .Rdata 文件相同的方式影响“加载回 R”部分。
问题
谁能告诉我为什么加载以前计算的对象会对我的 Rterm 进程的内存消耗产生如此大的影响(与在我启动的每个新进程中计算它相比)以及如何最好地避免这种情况?
如果需要,我也会尝试提出一个示例,但重现我的确切场景有点棘手。不过我会试试的。
【问题讨论】:
-
尝试重现一个玩具示例可能会告诉您为什么会发生这种情况。至少这对我来说是这样的。
标签: performance r caching memory