主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

状态相关函数

您要部署的 MATLAB® 代码通常带有状态 - 程序或程序变量中的特定数据值。

我的 MATLAB 函数是否带有状态?

MATLAB 程序中进位状态的示例包括但不限于:

  • 修改或依赖 MATLAB 路径和 Java® 类路径

  • 访问本质上持久或全局的 MATLAB 状态。例如:

    • 随机数种子

    • Handle Graphics® 根对象

    • MATLAB 或 MATLAB 工具箱设置和预设项

  • 创建全局变量和持久变量。

  • 将 MATLAB 对象(MATLAB 类)加载到 MATLAB 中。如果您以任何方式访问 MATLAB 对象,它会加载到 MATLAB 中。

  • 调用包含静态变量的 MEX 文件、Java 方法或 C# 方法。

防御性编码实践

如果您的 MATLAB 函数不仅带有状态,而且还依赖它来使您的函数正确执行,则您必须采取额外步骤(在本节中列出)来确保状态保留。

部署应用程序时,请考虑携带状态的情况,并在必要时防止该状态的损坏。假设您的状态可能会发生变化,并针对该情况进行防御性编码。

以下是“防御性编码”实践的示例:

重置已部署应用程序中的系统生成值

例如,如果您使用随机数种子,请在部署的应用程序中重置它以确保原始 MATLAB 函数的完整性。

验证全局或持久变量值

如果必须使用全局变量或持久变量,请始终在部署的应用程序中验证它们的值,并在需要时重置。

确保访问数据缓存

例如,如果您的函数依赖于对先前请求的缓存回复,请确保您部署的系统和应用程序可以在 MATLAB 环境之外访问该缓存。

尽可能使用简单数据类型

简单数据类型通常不与特定的应用程序和存储状态的方式相关。随着数据类型变得越来越不复杂和具体,选择合适的状态保存工具的选项就会增加。

避免使用 MATLAB 回调函数

避免使用 MATLAB 回调,例如 timer。回调函数能够中断和覆盖 MATLAB Production Server™ 工作进程的当前状态,并且可能在多用户环境中产生不可预测的结果。

保存状态的技术

最合适的保存状态方法在很大程度上取决于您需要保存的数据类型。

  • 数据库提供了最通用且可扩展的保留状态数据的方法。该数据库充当通用存储库,通常可以与企业开发环境中的任何应用程序一起使用。它不对数据结构或布局施加要求或限制。另一种相关技术是在 Microsoft® Excel® 等应用程序中使用逗号分隔的文件。

  • 可以使用多种技术来保留特定于第三方编程语言(例如 Java 和 C#)的数据。请查阅相应第三方供应商的在线文档,了解有关保存状态的最佳做法。

小心

使用 MATLAB LOADSAVE 函数通常用于保留 MATLAB 应用程序和工作区中的状态。虽然这在某些情况下可能会成功,但如果数据没有存储在数据库等通用存储库中,则强烈建议验证数据并在必要时重置数据。