function field_access_timing() value_obj = value_class(); handle_obj = handle_class(); struct_obj = struct(); struct_obj.foo = value_obj.foo; foo_string = 'foo'; % used by .() access foo_ref = struct('type','.', 'subs','foo'); % used by subsref() access iters = 100000; %% compute loop iteration overhead sum = 0; tic; for i=1:iters sum = sum + 1; end loop_overhead = toc*1e6/iters; %% compute timings for each object type objects = { struct_obj, value_obj, handle_obj }; for io=1:length(objects) obj = objects{io}; %% Direct field access using . sum = obj.foo; tic; for i=1:iters sum = sum + obj.foo; end dt = toc*1e6/iters - loop_overhead; fprintf('%s: obj.field access time = %.3f usec \n', class(obj), dt); %% Field access by string using .() sum = obj.(foo_string); tic; for i=1:iters sum = sum + obj.(foo_string); end dt = toc*1e6/iters - loop_overhead; fprintf('%s: obj.(''field'') access time = %.3f usec\n', class(obj), dt); %% Field access by string using subsref() sum = subsref(obj, foo_ref); tic; for i=1:iters sum = sum + subsref(obj, foo_ref); end dt = toc*1e6/iters - loop_overhead; fprintf('%s: subsref(obj,struct) access time = %.3f usec\n', class(obj), dt); fprintf('\n'); end end