首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中缓慢删除句柄对象

在MATLAB中缓慢删除句柄对象
EN

Stack Overflow用户
提问于 2012-09-11 16:29:38
回答 2查看 316关注 0票数 1

我使用MATLAB编写了一个模拟引擎,用于模拟生产环境中的产品流程。我从handle继承了所有的used类,并使用这些句柄(我想是相当过多的)来连接产品和工作系统、订单等。

现在,为了运行模型的多个实例,我创建了一个包含所有其他对象及其关系的模拟对象,运行模型并释放模拟变量。

创建和运行模型需要大约50秒(这包括所有对象的生成、它们的关系,当然还有在模拟运行过程中的计算)。在下一次运行之前释放变量,目前需要大约3-4分钟!

我尝试了清除、删除和普通覆盖旧的模拟对象,但没有注意到性能上的显著差异。

有没有一种方法可以在不重写代码的情况下提高性能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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倍。

票数 0
EN

Stack Overflow用户

发布于 2012-09-11 16:35:07

在没有看到代码或者至少是一些高级设计的情况下,很难对您的代码说出任何特别的东西。

在优化OO方面之前有一个简短的建议:你确定瓶颈在对象创建中吗?使用分析器进行验证。

如果OO确实是瓶颈,下面是一些猜测:

  1. 您已经使用了循环引用。Matlab没有使用垃圾收集器,而是一种智能的引用计数机制,在这种情况下可能会相当慢。将对象之间的引用改为树状。
  2. 你已经创建了大量的对象。Matlab对每个对象都有很大的开销,比传统的语言(c++,java)要多得多。重新设计系统,使其具有更少的对象。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12365687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档