Oct. 4th, 2011

green_fr: (Default)
Пытаемся причесать немного нашу программу на MatLab’е, группируем написанные разными людьми скрипты в классы.
И вдруг замечаю, что функция, оформленная в виде метода, исполняется в разы медленнее... Один и тот же код (copy-paste), только данные не в глобальных переменных, а члены класса.

Позвонил в support, они мне говорят, что это не баг, это фича: доступ к переменным объекта занимает слегка больше времени, чем доступ к простым переменным. Пообещали передать разработчикам, но, судя по внутренней базе, разработчики не считают это поведение анормальным.

Оказалось, MatLab не помнит результатов проверок, которые он проводил только что. Например, в методе класса есть цикл, в цикле мы обращаемся к переменной класса (мой случай — к статической константе!). Так вот, он на каждой итерации будет проверять, существует ли такая переменная, не переопределена ли она дочерними классами, и какой у неё уровень доступа.

Написал «патч»: в начале каждого метода считываю константы в локальные переменные.
Одна из функций разогналась с 42 секунд до полутора.
Послал предложение усовершенствования в MathWorks, может премию вышлют :-)

Profile

green_fr: (Default)
green_fr

March 2026

S M T W T F S
1234567
8 91011 121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 13th, 2026 07:10 am
Powered by Dreamwidth Studios