matlab中的静态方法

时间:2015-02-08 16:47:33

标签: matlab oop

为了减少源文件的数量,提高代码的可读性并避免使用子文件夹,我在同一个类中定义了几个静态方法。这是否会减慢运行时间?我知道在对象上调用方法很昂贵。我只是使用静态方法。

2 个答案:

答案 0 :(得分:1)

调用MATLAB静态方法甚至比公共或私有方法慢。在之前描述您的代码,您打算更改任何内容。如果一个函数/方法没有经常被调用 ,就像@hoki所说的那样,

  

开销将无法察觉

对于性能关键的来电,我建议

  • 使用子函数或mfile函数。

  • 尽量避免许多函数调用

  • 如果您需要在MATLAB中计算事物并且无法将关键部分提供给MEX代码,请尝试将与mfile相关的所有内容(包括子函数)捆绑在一起以构建代码。

  • 如果您无法避免方法调用,请使用my_method(obj, ...)语法而不是obj.my_method(...表示法

查看@andrewjanke提供的关于此主题的this helpful answer

以下是MATLAB 2014b链接答案中提供的基准测试。结果几乎没有变化。

Matlab R2014b on PCWIN64  
Matlab 8.4.0.150421 (R2014b) / Java 1.7.0_11 on PCWIN64 Windows 7 6.1 (VGFDST01) 
Machine: Core i7-3770 CPU @ 3.40GHz, 16 GB RAM (ESPRIMO P510)
nIters = 100000 

Operation                        Time (µsec)  
nop() function:                         0.11 
nop() subfunction:                      0.11 
@()[] anonymous function:               0.54 
nop(obj) method:                        3.91 
nop() private fcn on @class:            0.15 
classdef nop(obj):                      5.08 
classdef obj.nop():                     9.41 
classdef pivate_nop(obj):               5.01 
classdef class.static_nop():           10.05 
classdef constant:                      4.83 
classdef property:                      1.25 
classdef property with getter:         17.56 
+pkg.nop() function:                    3.57 
+pkg.nop() from inside +pkg:            3.18 
feval('nop'):                           2.27 
feval(@nop):                            0.21 
eval('nop'):                           42.72 
Java obj.nop():                        19.65 
Java nop(obj):                          3.85 
Java feval('nop',obj):                  7.93 
Java Klass.staticNop():                 8.40 
Java obj.nop() from Java:               0.01 
MEX mexnop():                           0.83 
builtin j():                            0.02 
struct s.foo field access:              0.10 
isempty(persistent):                    0.00 

答案 1 :(得分:1)

调用静态方法过去很昂贵,但从R2015b开始,它(几乎)just as fast调用常规.m函数。因此,考虑到它们在某些情况下提供的便利性,即使在代码的性能关键部分,也没有理由不使用它们。