Here's a trivial copy/paste example that demonstrates the problem, it performs each step 3000 times. This just parses 2 trivial strings. Adding large matrices exacerbates the problem, but even with trivial inputs like this it becomes obvious.
% Setup
STR_COMPARE = {'option A', 'option B'};
iters = 3000;
% inputParser initializations, kinda slower than it should be
tic; for i = 1:iters; p = inputParser; end; toc;
% Add a couple simple optional string parameters, untimed
addOptional(p,'option1','option B',@(v)any(strcmp(STR_COMPARE,v)));
addOptional(p,'option2','option B',@(v)any(strcmp(STR_COMPARE,v)));
% Parsing 2 string parameters should be trivial
tic;
for i = 1:iters;
parse( p, 'option1', 'option A', 'option2', 'option B' );
end;
toc;
% Comparable non-trivial operation.
tic; for i = 1:iters; rand(120,120); end; toc;
% Output (initialize / parse / compare to rand(120:120))
% Elapsed time is 0.047984 seconds.
% Elapsed time is 0.403222 seconds.
% Elapsed time is 0.360593 seconds.