Опубликована статья Используйте EX5-библиотеки для продвижения своих разработок:
Автор: Alex Sergeev
Ай маладца, сам набочил сам исправился, очередная затычка пока у нас не всё хорошо.
С год назад тоже этим страдал, энтузизизма было море. Препятствия? не, нивидал. Хотя может у меня просто послепраздничное такое настроение ... :(
А какова стоимость вызова функций библиотеки, в сравнении со стоимостью вызова родных функций класса?
ведь это вам не просто обёртку сделать, тут на каждый чих нужно библу вызывать.
Ай маладца, сам набочил сам исправился, очередная затычка пока у нас не всё хорошо.
Вообще-то как раз здесь все не так плохо.
Статья по делу. Либами пользуюсь постоянно -- это пока единственный способ нормального разделения кода.
Ты лучше скажи -- когда универсальные мега нейронки будут?
Urain:
А какова стоимость вызова функций библиотеки, в сравнении со стоимостью вызова родных функций класса?
проверял. разницы нет.
вот такой вызов пустышки Test при import или при include не влияет на время.
/* #import "Graph.ex5" void Test(long achart,string name,int awnd,int ax,int ay,color aclr); #import */ #include "Graph.mq5" void OnStart() { long a=GetTickCount(); for (int i=0; i<1000000; i++) { Test(0, "qwe", 0, 10, 10, clrRed); } Print(string(GetTickCount()-a)); }
Вообще-то как раз здесь все не так плохо.
Статья по делу. Либами пользуюсь постоянно -- это пока единственный способ нормального разделения кода.
Ты лучше скажи -- когда универсальные мега нейронки будут?
Вашим же салом вам же по мусалам, а твои когда будут?
Честно говоря ещё немного почитаю твои посты и вообще брошу МТ5 нафик.
Достали все эти костыли до глубины души, куда не кинь всё наперекосяк, "а трамвай пускать собираются" :)
Нейронка валяется гдето, если серьёздно с настроем засесть там работы осталось фигня, а настроя нету.
проверял. разницы нет.
вот такой вызов пустышки Test при import или при include не влияет на время.
Как говорится почувствуй разницу:
2012.01.06 16:46:28 Калькулятор (EURUSD,H1) пусто=281
2012.01.06 16:46:28 Калькулятор (EURUSD,H1) либа=2344
//+------------------------------------------------------------------+ //| Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void OnStart() { int res=0; long a=GetTickCount(); for(int i=0; i<100000000; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("либа=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<100000000; i++) { res=10+10; } Print("пусто=",string(GetTickCount()-a)); }
Как говорится почувствуй разницу:
не, так ты же про вызов функции спрашиваешь?
или скорость выполнения цикла вообще проверить решил?
я проверил разницу между просто вызовом функции, или вызовом из ex5 библы. Разницы скорости вызова функций нет.
А то понятно, что пустой цикл без вызова функции будет работать быстрее. зачем вобще это проверять.
не, так ты же про вызов функции спрашиваешь?
или скорость выполнения цикла вообще проверить решил?
я проверил разницу между просто вызовом функции, или вызовом из ex5 библы. Разницы скорости вызова функций нет.
А то понятно, что пустой цикл без вызова функции будет работать быстрее. зачем вобще это проверять.
Циклы одинаковые, исполняемые действия внутри циклов одинаковые (в одном случае прямо в цикле в другом случае внутри функции) разница во времени даёт чистое время вызова функции из либы.
Для чистоты эксперимента опишем аналогичную функцию прямо в файле:
2012.01.06 17:18:39 Калькулятор (EURUSD,H1) пусто=281
2012.01.06 17:18:38 Калькулятор (EURUSD,H1) либа=2281
//+------------------------------------------------------------------+ //| Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void Testlocal(long achart,string name,int &awnd,int ax,int ay,color aclr) { awnd=ax+ay; } void OnStart() { int res=0; int count=100000000; long a=GetTickCount(); for(int i=0; i<count; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("либа=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<count; i++) { Testlocal(0,"qwe",res,10,10,clrRed); } Print("пусто=",string(GetTickCount()-a)); }
ЗЫ чтоб исключить ошибку, я даже длину цикла переписал от одной переменной count, результат тотже.
у меня в 4,5 раза
2012.01.06 17:28:33 test (EURUSD,D1) ex5=2047
2012.01.06 17:28:31 test (EURUSD,D1) локал=438
Алекс тебе этого мало?
там в 4 раза, тут в 2 раза итд.
начнём писать библы на основе библов, разы тормозов нарастут как снежный ком.
Подобную схему можно юзать при условии что сама библа не использует вызова библы.
Разница в скорости указанного примера из-за того, что оптимизатор кода в одном случае полностью заинлайнил столь простую функцию, полностью исключив даже сам вызов функции, а в другом случае был вынужден по честному вызывать внешнюю функцию.
В тестах нужно обязательно учитывать неминуемое влияние оптимизатора кода. Данный пример цикла вообще вырождается в res=100; у приличного компилятора в случае локальной функции.
Попробуйте сделать вызываемую функцию посерьезнее, чтобы избежать инлайнинга и протестируйте снова.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Используйте EX5-библиотеки для продвижения своих разработок:
С помощью сокрытия реализации функций/классов в ex5-файл вы сможете делиться своими ноу-хау алгоритмами с другими программистами, создавать общие проекты и продвигать их в сети. И пока команда MetaQuotes всеми силами приближает возможность прямого наследования классов из ex5‑библиотек, мы реализуем данную возможность уже сейчас.
Автор: Alex Sergeev