Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *Теория* | Кодогенерация (http://forum.oszone.net/showthread.php?t=69780)

Vlad Drakula 13-08-2006 11:01 471436

*Теория* | Кодогенерация
 
вот сейчас исследую возможности кодогенерации...

пробовал через евал и в PHP
и через компиляцию в C#

была цель: как можно быстрее выполнить определенную задачу...
сначала все работало на PHP, но в один прекрасный момент начало сильно тормозить...
перешол на C# скорость возросла...
решил попробовать кодогенерацию, может по быстрее будет работать...
и столкнулся с очень не приятной особенностью: очень большое время запуска...

там всего то 333Кб кода...
в итоге исполняемый файл в 254кб... а запускается очень долго...

зато вроде работает быстрее... но все преимущества ускорея съедаются долгой загрузкой :(

ктонибуть использовал методы кодогенераю?

Vlad Drakula 13-08-2006 14:13 471472

пришлось переходить на менежджет C++, как не сттранно хотел написать нечто подобное на чистом С++ только как то в MSDN вся информация о работе с XSL и XML в C++ глубоко лежит...

ivank 13-08-2006 17:31 471496

Vlad Drakula
Под кодогенерацией много чего понимают.

Из твоего объяснения я лишь понял, что ты хотел что-то сделать. И в конце концов сделал. А что и как - ни слова.

Vlad Drakula 13-08-2006 18:07 471499

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

соответственное есть определенное решение этой проблдеммы...

зачастую легче написать программу которая сгенерит код другой программы...

в общем то так я и сделал...

1) одна программа (написана на C#) по XML файлу генерирует код тругой программы (уже на C++ .NET)
2) получившийся код компилируется
3) получившаяся программа запускается

объем кода программы на С++ почти 600кб...

причем я приследовал одну единственную цель: как можно больше сократить время выполнения...
можно конечно сказать что на чистом С++ работало бы быстрее, я так и хотел сделать но столкнулся с нехваткой документации по работе с XSL в С++...
по этому принял компромисное решение...

в итоге тандем работает быстрее... но прямого сравнения я не делал т.к. у меня все это делает пока CMD файл а не единое приложение, но время работы сократилось примерно в 2-3 раза...

XCodeR 13-08-2006 19:10 471504

Vlad Drakula
Цитата:

зачастую можно писать программу которая будет быстрее работать но для этого нужно написать пару тройку сотен кб кода
а пример подобной задачи(программы) можно?

Vlad Drakula 13-08-2006 22:11 471540

XCodeR
к примеру действия с большими матрицами...
зачастую многие пишут это во вложенных циклах, но с точки зрения это лучьше организовать без них.

pva 28-08-2006 06:49 477517

Не зависит, на кокм языке вы пишете программу (если он компилируется в машинные коды). Имеет значение лишь эффективность алгоритма. Зачастую смена алгоритма (емли она возможна) повышает производительность в десятки раз по сравнению с оптимизацией. 600 КБ - это не показатель быстродействия. Например, алгоритмы поиска по степени увеличения скорости: линейный, деление пополам, поиск по хеш-таблице. Никакая оптимизация не увеличит скорость линейного поиска до хеш-таблиц на больших данных. Оптимизация - это когда ничего другого уже не помогает.
Есть программы 600 МБ, которые запускаются очень быстро.
Если у вас есть альтернативный источник информации по XML - не обязательно пользоваться MSDN для написания программ на C++. Я, например, пользуюсь книгами Adisson Westley.
Приведите в двух словах алгоритм. По крайней мере так можно дать совет. И ещё: попробуйте галочку "релиз". Иногда помогает запускать быстрее.


Время: 07:25.

Время: 07:25.
© OSzone.net 2001-