попробуйте сначала сделать другой скрипт, примитивный, будет ли с ним подобная проблема или нет.
Хороший совет, но не пригодился. Потому что проблема была обнаружена путем удаления кусков кода строка за строкой.
А вот результат оставил меня в полном недоумении. Похоже на какой-то глюк.
Итак, начну от печки.
1. Когда программой генерится исполняемый скрипт codeXX.cs, в него вставляется строчка:
TSLab.Script.IPane Главное_pane = context.CreatePane("Главное", 50, false);Назначение очевидно - создать главную панель для отображения графиков.
2. Обратите внимание на второй параметр. Согласно документации, это относительный размер панели. Поскольку в документации его описание выглядит как
double SizePct [get, set], то его очевидно можно изменять по мере необходимости.
3. Я в своем скрипте вставляю строчки:
TSLab.Script.IPane Main_pane = context.First;
Main_pane.SizePct = 50;4. Вторая строчка в общем-то не нужна, просто ниже создаются дополнительные панели, и хочется быть уверенным, что их размеры не изменятся, если TSLab по какой-то причине решит генерить исполняемый скрипт с другой цифрой в строке, приведенной в пункте 1.
5. Никаких замечаний ни со стороны компилятора (Sharp Develop 3.2.0), ни со стороны TSLab. Да и с какой стати?
6. Так вот, если эта строка в коде присутствует, происходит то самое явление - повторная генерация и компиляция исполняемого скрипта на каждом шаге компиляции, а также при каждом нажатии на F5 в TSLab.
7. А если отсутствует - ничего лишнего не генерится, оптимизация идет с нормальной скоростью, время прогнозируется разумное и по ходу дела уменьшается.
8. Забавно, что при оптимизации эта часть кода вообще не исполняется, потому что для экономии времени чуть выше вставлена строка:
if(context.IsOptimization) return;return - потому что строки прорисовки графиков идут последними в функции Execute создаваемого класса.
Хотелось бы получить комментарий разработчиков.
Кроме того, нельзя ли из генерируемого скрипта убрать ненужный пустой цикл по барам:
int barsCount = var0.Bars.Count;
for (int i = context.TradeFromBar; (i < barsCount); i++)
{
}Только время зря тратит, хоть и немного.