Производительность и смешивание компиляторов
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 30.08.07 10:36
Оценка:
Привет всем.

Тема сообщения, конечно, немного сумбурная, но лучше сформулировать не смог

Ситуация такая.

Есть большой программный комплекс, состоящий из множества COM-модулей. Изначально все компилировалось на BCB5 (практически без оптимизации). В течении многих лет комплекс шлифовался во всех направлениях. Производительность была более менее приемлемая. Тут, в свете увядания любви к BCB, пересобрали модуль с сервисными COM-объектами на VC8 (speed-оптимизация по максимуму). Объекты из этого модуля юзаются практически повсеместно.

Ну дык вот. Производительность упала на глазах — раз в пять. Видно прямо при перерисовке окон (сделаны на BCB5) — отображаемые данные тащатся из объектов, обcлуживаются именно этим сервисным модулем, откомпилированным на VC8. Если этот модуль заново пересобрать на BCB5 — все нормально.

Модуль c GUI (собран на BCB5) компилируется со статической библиотекой.
Сервисный модуль всегда компилировался с использованием динамической библиотекой — сс3250mt.dll (BCB5) и MSVCP80.dll,MSVCR80.dll (VC8).

То есть, каждый модуль всегда жил со своей собственной кучей.

Я вот чего думаю. BCB5 юзает RW-STL, а VC8 — другую STL. Сдается мне главное различие в том, что в RW-STL basic_string юзает счетчики ссылок, а VC8-STL всегда копирует строки. В результате получается ахтунг.

С удовольствием выслушаю другие гипотезы о причинах такого резкого снижения производительности.

PS. Профайлера у меня нет, так что даже и не предлагайте
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.