Форум программистов, компьютерный форум CyberForum.ru

Код из-под COM работает в 3 раза медленнее - C++ COM

Восстановить пароль Регистрация
 
vlad1987
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 3
26.04.2016, 10:05     Код из-под COM работает в 3 раза медленнее #1
Всем доброго времени суток! Прошу уважаемых форумчан не пинать, если вопрос слишком простой, я делаю только первые шаги в знакомстве с технологией COM. Столкнулся вот с какой проблемой.

1) есть некий код на C++, для наглядности пусть он находится в теле функции void f1();
2) есть COM-компонента, оформленная в виде DLL, которая является оберткой вокруг этого кода, что-то вроде

C++
1
2
3
4
5
STDMETHODIMP component::run()
{
    f1();
    return S_OK;
}
Обнаружил, что код f1(), вызываемый из статично слинкованной программы работает раза в 3-4 быстрее, чем вызов интерфейсного метода run():
C++
1
2
3
4
5
6
7
8
#import "path\\to\\dll\\component.dll"
int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize( NULL );
    CComQIPtr<component> ptr;
    ptr.CoCreateInstance( OLESTR( "component.progID" ) );
    ptr->run();
}
Вопрос: можно ли повысить продуктивность вызова метода COM-компоненты? Если да, как?

Добавлено через 9 часов 59 минут
Спасибо за ответ, но к сожалению рекомендованные ссылки не относятся к моей проблеме.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2016, 10:05     Код из-под COM работает в 3 раза медленнее
Посмотрите здесь:

Работает медленнее, чем обычно OpenGL
Delphi TMemoryStream работает гораздо медленнее чем TFileStream
Парсер на сервере работает намного медленнее чем на Денвере! PHP
Windows 7 Интернет на Windows 7 работает медленнее, чем на XP.
Компьютер работает медленнее чем обычно
Система работает всё медленнее и медленнее (Ubuntu 14)
Чем больше диск, тем медленнее работает?
Временами пропадает интернет и с недавних работает медленнее
C++ Многопоточная версия программы работает медленнее однопоточной

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,490
26.04.2016, 11:19     Код из-под COM работает в 3 раза медленнее #2
Измените подход к проектированию и делайте 1 млн вызовов внутри ком.
vlad1987
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 3
26.04.2016, 17:18  [ТС]     Код из-под COM работает в 3 раза медленнее #3
Спасибо за ответ. Не могли бы Вы пояснить эту мысль на примере того кода, который я привел?
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,490
26.04.2016, 18:47     Код из-под COM работает в 3 раза медленнее #4
Если время на вызов через ком сопоставимо с временем выполнения функции то увеличить скорость можно только перепроектировав Приложение. Например каждый вызов это обработка одного файла - обрабатывайте не по одному а сразу по 100 передавая функции список файлов. Если функция сама по себе тяжелая отличий в скорости вы не должны были заметить.
vlad1987
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 3
27.04.2016, 00:53  [ТС]     Код из-под COM работает в 3 раза медленнее #5
В том-то и дело, что функция тяжелая. Но тем не менее запуск из статической линковки в разы быстрее, чем вызов через COM. Вот я и хочу узнать, может быть есть какие-то оптимизирующие параметры компилятора, которые нужно указать? Или может быть другие нюансы, которые я упустил в силу отсутствия опыта в это технологии.
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,490
27.04.2016, 09:42     Код из-под COM работает в 3 раза медленнее #6
Цитата Сообщение от vlad1987 Посмотреть сообщение
В том-то и дело, что функция тяжелая
это настолько странно что хочется сказать невозможно. само тело функции исполняется как обычный код - то что этот код сидит в COM-обертке ничего не меняет в плане его производительности. потери производительности могут быть только на вызов так как техника самого вызова и передачи параметров существенно отличается от обычного. сам код тела функции не меняется. возможно вы собираете COM-объект с одними настройками (в одной среде) а его альтернативу с другими (в другой среде). дайте модельный пример на котором в реале можно проверить описанное поведение
Yandex
Объявления
27.04.2016, 09:42     Код из-под COM работает в 3 раза медленнее
Ответ Создать тему
Опции темы

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru