【问题标题】:Where is 'persistent' data stored in compiled MATLAB programs?已编译的 MATLAB 程序中存储的“持久”数据在哪里?
【发布时间】:2018-12-04 06:52:01
【问题描述】:

我在 MATLAB 中有一个应用程序,它在数据加载到自身时缓存数据。 通过使用“持久”命令,这些数据被“缓存”在函数中。例如。

persistent data
if isempty(data)
    data = getData() % function that reads data in
end

当这些数据被缓存时,它会去哪里? 我注意到即使程序关闭并重新打开,缓存仍然存在。 是否正在写入磁盘?还是缓存存储在内存中?

一些细节:这是一个使用 Matlab Compiler Runtime 创建的程序,它是使用 R2014b 编写的。我不知道如何检查大数据可能有多大,所以在这方面的任何帮助都会是一个奖励。

编辑:缓存没有在我可以看到的程序实例之间持续存在。我最初在我的程序的未编译版本中观察到这一点,这是有道理的,因为缓存将与 matlab 实例一起存在。

【问题讨论】:

  • 持久数据应该在内存中。我怀疑它能否在新的程序实例中持续存在。 getData 有什么作用?可能是从文件中读取?
  • 关闭程序后它们仍然存在?!
  • getData 不是文字示例。它只是一个虚拟函数来表示我的代码实际执行的操作(从服务器获取大量数据),因为该函数不是很重要。数据是一个结构,如果有帮助的话。同样在第二次检查中,数据似乎不会在应用程序的不同实例中持续存在;我会在我的问题中澄清这一点。
  • 在您编辑之后,似乎没有多少问题了。我想你已经回答了你自己的问题。

标签: matlab caching persistent-storage


【解决方案1】:

它存储在内存中。正如您在编辑中观察到的那样,它应该在 MATLAB 会话中持续存在,而不是跨会话持续存在。如果您编译它并针对 MATLAB Compiler Runtime 运行它,它不应该在关闭和重新运行已编译的程序时持续存在 - 如果是这样,那就是一个错误。

我从未见过编译的可执行文件会发生这种情况,但我已经看到它发生在为与 MATLAB Production Server 一起使用而创建的编译组件上(其中可以多次使用相同的运行时,并且它不能正确清除电话)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多