状态相关函数
您要部署的 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 LOAD 和 SAVE 函数通常用于保留 MATLAB 应用程序和工作区中的状态。虽然这在某些情况下可能会成功,但如果数据没有存储在数据库等通用存储库中,则强烈建议验证数据并在必要时重置数据。