这有点难。您可以更改代码以将工作分解为块以提高效率,而不是寻求重新启动以清除问题?碎片主要与单元相关的内存使用峰值以及数据项大小的变化程度成正比,而随着时间的推移与总使用量成正比。如果您可以将一大块工作分成按顺序完成的小块,这可以降低碎片化内存使用的“高水位线”。您还可以通过使用共享其支持数据值的“享元”数据结构来节省内存使用量,或者有时转换为基于单元格的结构以引用对象或数字代码。你能和我们分享一个你的代码和数据结构的例子吗?
从理论上讲,您可以通过将工作区和相关状态保存到 mat 文件并让可执行文件启动另一个实例并选择重新加载该状态并继续,然后让原始可执行文件退出来获得一个干净的状态。但就用户体验和调试能力而言,这将是非常难看的。
另一种选择是将高碎片代码卸载到另一个可以被杀死并重新启动的工作进程,而主要的可执行进程仍然存在。如果你有并行计算工具箱,现在可以编译成独立的 Matlab 可执行文件,这将非常简单:打开一个由一两个工人组成的工人池,并使用同步调用在其中运行脆弱的代码,定期杀死工人并提出新的。工人是独立的进程,从非碎片化的内存空间开始。如果您没有 PCT,您可以通过将您的应用程序编译为两个单独的应用程序(驱动程序应用程序和工作程序应用程序)来推出自己的应用程序,并让主应用程序启动一个工作程序并通过 IPC 控制它,来回传递您的数据作为 MAT 文件或字节流。那'
也许您也可以将一些零碎的代码下推到 Java 层,它可以更优雅地处理类似单元格的数据结构。
首先将代码更改为不那么脆弱可能是更简单和更容易的方法,并且导致应用程序设计不那么复杂。根据我的经验,这通常是可能的。如果您分享一些代码和数据结构细节,也许我们可以提供帮助。