为了减少源文件的数量,提高代码的可读性并避免使用子文件夹,我在同一个类中定义了几个静态方法。这是否会减慢运行时间?我知道在对象上调用方法很昂贵。我只是使用静态方法。
答案 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
函数。因此,考虑到它们在某些情况下提供的便利性,即使在代码的性能关键部分,也没有理由不使用它们。