0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 4

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

26.04.2016, 10:05. Показов 1635. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Прошу уважаемых форумчан не пинать, если вопрос слишком простой, я делаю только первые шаги в знакомстве с технологией 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 минут
Спасибо за ответ, но к сожалению рекомендованные ссылки не относятся к моей проблеме.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2016, 10:05
Ответы с готовыми решениями:

SSD работает в 2 раза медленнее
Здравствуйте ребята, купил SSD скорость которого должна быть более 500 мб/с. После установки проверил скорость и она оказалась 275 мб/с....

Система работает всё медленнее и медленнее (Ubuntu 14)
Ноут HP PAVILION dv6-6077er Core i7 2630QM 2000 Mhz 8GB DDR3 500Gb TOSHIBA MK5061GSYN ATI Radeon HD 6770М Наверное, уже в...

I5-8250U при питании от сети в два раза медленнее
Собственно тестирование в AIDA64 (CPU PhotoWorxx) : Питание - 5300 Мпкс/c - 400 МГц Аккум - 11706 Мпкс/c -3400 МГц Я ожидал...

5
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
26.04.2016, 11:19
Измените подход к проектированию и делайте 1 млн вызовов внутри ком.
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 4
26.04.2016, 17:18  [ТС]
Спасибо за ответ. Не могли бы Вы пояснить эту мысль на примере того кода, который я привел?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
26.04.2016, 18:47
Если время на вызов через ком сопоставимо с временем выполнения функции то увеличить скорость можно только перепроектировав Приложение. Например каждый вызов это обработка одного файла - обрабатывайте не по одному а сразу по 100 передавая функции список файлов. Если функция сама по себе тяжелая отличий в скорости вы не должны были заметить.
1
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 4
27.04.2016, 00:53  [ТС]
В том-то и дело, что функция тяжелая. Но тем не менее запуск из статической линковки в разы быстрее, чем вызов через COM. Вот я и хочу узнать, может быть есть какие-то оптимизирующие параметры компилятора, которые нужно указать? Или может быть другие нюансы, которые я упустил в силу отсутствия опыта в это технологии.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
27.04.2016, 09:42
Цитата Сообщение от vlad1987 Посмотреть сообщение
В том-то и дело, что функция тяжелая
это настолько странно что хочется сказать невозможно. само тело функции исполняется как обычный код - то что этот код сидит в COM-обертке ничего не меняет в плане его производительности. потери производительности могут быть только на вызов так как техника самого вызова и передачи параметров существенно отличается от обычного. сам код тела функции не меняется. возможно вы собираете COM-объект с одними настройками (в одной среде) а его альтернативу с другими (в другой среде). дайте модельный пример на котором в реале можно проверить описанное поведение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2016, 09:42
Помогаю со студенческими работами здесь

Работает медленнее, чем обычно
Всем привет! Написал приложение использующее OpenGL и WinAPI. Всё бы хорошо, если бы при тестах на других компьютерах (на Win 7 и XP)...

Компьютер работает медленнее чем обычно
Добрый день! С недавнего времени стал медленнее работать компьютер (медленнее открываются приложения, сворачиваюся\разворачиваются в...

Интернет на Windows 7 работает медленнее, чем на XP.
Сейчас перешел с XP на Windows 7, но скорость загрузки упала почти в 3 раза. Сейчас стоит XP and Windows 7, на XP скорость идет заявленная,...

Чем больше диск, тем медленнее работает?
Встретил в одном из выступлений на ютубе такой тезис, что чем больше емкость диска, тем медленнее он работает. По той причине, что запись...

После новой видеокарты комп работает медленнее
Всем привет! Решил обновить себе компьютер. Заменил видеокарту GTX 650 на GTX 1050, но теперь компьютер стал работать еще медленнее,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru