我使用MATLAB编写了一个模拟引擎,用于模拟生产环境中的产品流程。我从handle继承了所有的used类,并使用这些句柄(我想是相当过多的)来连接产品和工作系统、订单等。
现在,为了运行模型的多个实例,我创建了一个包含所有其他对象及其关系的模拟对象,运行模型并释放模拟变量。
创建和运行模型需要大约50秒(这包括所有对象的生成、它们的关系,当然还有在模拟运行过程中的计算)。在下一次运行之前释放变量,目前需要大约3-4分钟!
我尝试了清除、删除和普通覆盖旧的模拟对象,但没有注意到性能上的显著差异。
有没有一种方法可以在不重写代码的情况下提高性能?
发布于 2012-10-26 02:42:30
您是否碰巧使用单元数组来存储handle对象中的其他handle对象?在Matlab R2011A之前,这可能会导致严重的速度减慢。请参阅http://www.mathworks.com/support/solutions/en/data/1-6VVMS0/index.html?product=ML
一种解决方法是使用temp局部变量来操作单元格数组,然后将此tmp变量分配回handle对象属性。在一个案例中,我看到在执行此操作后,性能提高了约100倍。
发布于 2012-09-11 16:35:07
在没有看到代码或者至少是一些高级设计的情况下,很难对您的代码说出任何特别的东西。
在优化OO方面之前有一个简短的建议:你确定瓶颈在对象创建中吗?使用分析器进行验证。
如果OO确实是瓶颈,下面是一些猜测:
https://stackoverflow.com/questions/12365687
复制相似问题