Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему отличается скорость выполнения функции в классе и вне его?

3.1K
30 апреля 2003 года
McSim
8 / / 16.04.2003
Интересная ситуация получилась. Есть функция которая динамически создает кнопочки, панельки и т.д. и выкладывает их на форму. Скорость, в принципе, приличная. Но вот когда я завернул это же функцию (без изменений) в свой класс, то начались страшные тормоза. Скорость создания упала практически в два раза! Вопрос: Почему?
310
30 апреля 2003 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by McSim
Интересная ситуация получилась. Есть функция которая динамически создает кнопочки, панельки и т.д. и выкладывает их на форму. Скорость, в принципе, приличная. Но вот когда я завернул это же функцию (без изменений) в свой класс, то начались страшные тормоза. Скорость создания упала практически в два раза! Вопрос: Почему?



Вообще, класс - это структура (условно говоря). Обращение к функции экземпляра класса есть обращение к члену структуры. Ещё дольше, если функция виртуальная. Но тем не менее, само по себе это не слишком много времени отнимает, если, конечно, не пытаться вызывать функцию (создающую за один вызов один контрол) в цикле несколько десятков раз.
Это я утрировано, конечно, написал. Приведите пример своего кода, может что ещё люди подскажут.

3.1K
30 апреля 2003 года
McSim
8 / / 16.04.2003
Цитата:
Originally posted by fellow


Вообще, класс - это структура (условно говоря). Обращение к функции экземпляра класса есть обращение к члену структуры. Ещё дольше, если функция виртуальная. Но тем не менее, само по себе это не слишком много времени отнимает, если, конечно, не пытаться вызывать функцию (создающую за один вызов один контрол) в цикле несколько десятков раз.
Это я утрировано, конечно, написал. Приведите пример своего кода, может что ещё люди подскажут.


Функция вызывается один раз и создает несколько десятков контролов. Может быть скорость падает из-за того, что я их все храню в TObjectList?

310
30 апреля 2003 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by McSim

Функция вызывается один раз и создает несколько десятков контролов. Может быть скорость падает из-за того, что я их все храню в TObjectList?



Если они и прежеде, когда функция была свободная, хранились там же, то вряд ли. Хотя, TObjectList я не использую никода. Пользуюсь std-контейнерами, просто по привычке.

3.1K
30 апреля 2003 года
McSim
8 / / 16.04.2003
Цитата:
Originally posted by fellow


Если они и прежеде, когда функция была свободная, хранились там же, то вряд ли. Хотя, TObjectList я не использую никода. Пользуюсь std-контейнерами, просто по привычке.



Нашел решение проблемы. Я все контролы выкладываю на TPanel (тоже создается динамически) и в начале цикла делаю панель невидимой, а после того как все контролы созданы - показываю её. Происходит все практически мгновенно. :-) Хотя в обычной функции (вне класса) панель была видимой всегда.

Но все равно остается неясным почему в классе скорость упала. !?

Спасибо fellow за отклик. ;-)

3
30 апреля 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by fellow

Вообще, класс - это структура (условно говоря). Обращение к функции экземпляра класса есть обращение к члену структуры.



Не верно.
Методы не храняться в экземпляре класса, как данные.
Вызов самостоятельного метода от метода-члена (не виртуального) отличается только тем, что при вызове метода-члена в него передается еще один аргумент - указатель на экземпляр класса (this). Обычно этот аргумент передается через регистр ECX, это зависит от компилятора.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог