Кубики для загрузки и выгрузки данных через КЕШ

Автор: _ID_

Кубики для загрузки и выгрузки данных через КЕШ - Fri Feb 01 2019 03:32 PM

Требуется реализовать возможность сохранения и подгрузки в агенте и в скрипте расчетов между скриптами и предыдущими расчетами.
Подробности в личку, бюджет обсуждаем
Автор: ViL

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 01:06 AM

Импорт и экспорт значений из агента в скрипта, из скрипта в агент, из агента в агент будет доступно в следующей версии программы 2.1, через два месяца выйдет программа.
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 10:37 AM

Дак есть же StoreGlobalObject и LoadGlobalObject. Или в кубиках сейчас их нет?
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 02:25 PM

Спасибо за информацию. А уже есть бетта версия, с функционалом кеша? Готов поучаствовать в тестировании.

И планируется ли реализовать кубик для сохранения в кеше результатов расчета внутри одного скрипта? (например, для визуализации уровней стакана)
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 02:37 PM

StoreGlobalObject и LoadGlobalObjec в виде кубиков отсутствует.

Нашел простой скрипт с курсов Родиона для сохранения расчетов в кеш. Сишарп компилит, а в TsLab не запускается кубик, выдает ошибку.

public class StoreDataSaveLoad : IExternalScript
{
public void Execute(IContext ctx, ISecurity sec)
{
var cache = ctx.LoadObject("counter");
var counter = cache == null ? 0 : (int)cache ;
counter++;
var color = System.Drawing.Color.Green;
ctx.Log("Скрипт StoreDataSaveLoadTest отработал {0} раз." + Convert.ToString(counter), new Color(color.ToArgb()));
ctx.StoreObject("counter", counter);
}
}
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 06:18 PM

Рабочий код, хотя метода IContext.Log (string text, Color color) и помечает как устаревший. Даже запустил, чтобы проверить - работает. Скорее всего этот скрипт под 1.2 писался, так что если пытаетесь в 2.0 запустить убедитесь, что у вас в референсес библиотеки от 2.0 подключены.
В 1.2 насколько я знаю нельзя было "защитить" кэш от стирания, поэтому все это не очень то надежно работало. В 2.0 можно:
ctx.StoreObject("counter", counter, true);
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 04 2019 09:33 PM

Вспомнил. Обычно StoreGlobalObject вроде бы нормально работает, но иногда нет frown У меня в тех поддержке с 17 декабря заявка висит...
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Thu Feb 07 2019 08:08 AM

Спасибо за подсказку. Действительно референсы были старые.
Но в самом TsLab все равно возникает непонятная ошибка:
code-2019-02-07-04-13-25-700-10.cs(43,17) : error CS1501: Ни одна из перегрузок метода "Execute" не принимает "1" аргументов

Скомпиленный кубик подключен к источнику данных.

Что делаю не так не понимаю, голову сломал.
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Thu Feb 07 2019 04:01 PM

Источник данных подключен к кубику "Внешний скрипт". Так?
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Thu Feb 07 2019 05:57 PM

Да, заработало. Спасибо!!!

Обратил внимание, что кеш сбрасывается (и глобальный и локальный) при пересчете. Счетчик запусков обнулялся ближе к 10 пересчету (иногда раньше иногда позже).

Единственный рабочий вариант оказался через глобальный кеш с записью на диск.
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Fri Feb 08 2019 09:53 AM

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

Но! Вот что пишет нам тех поддержка:

проблема есть в самом PermObjectsCache
если объект был помещен в кеш, но не успел записаться на диск, то во время CheckMemory (из базового класса) он может быть переведен на WeekRef и далее стрешен сборщиком мусора.
Мы перепишем код, напишем дополнительно.

Короче говоря, в реальной торговле использовать эти методы пока страшно. Я пока просто записываю нужные данные в файл на диске. Это медленнее и возможны ошибки при попытке одновременного доступа у файлу двух скриптов. Но пока так.
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Mon Feb 11 2019 11:47 AM

Мысль про жесткий диск интересная. Скорость наверное низкая?
А не знаете как внешний скрипт с КЕШом превратить в нормальный кубик. Утонул в интерфейсах API, нет нормального описания.
Автор: OldMo

Re: Кубики для загрузки и выгрузки данных через КЕШ - Tue Feb 12 2019 03:04 PM

На счет скорости я думаю, что скорость чтения данных из оперативной памяти в разы выше чем с диска. Я тот еще эксперт, но, вроде бы, большая скорость доступа - это причина, по которой оперативная память вообще существует. Но при этом если вы работаете на 1 минутном тайм фрейме или на большем, то это абсолютно не имеет значения. Более того, не уверен, что это имеет большое значение даже при работе на тиках. Судя по тому, что я вижу чтение/запись на диск нескольких чисел увеличивают время пересчета скрипта на время меньшее чем 1мс.

Насчет кубиков помочь не могу, так как никогда этого не делал.
Автор: Option Wizard

Re: Кубики для загрузки и выгрузки данных через КЕШ - Sat Mar 02 2019 04:34 PM

1. Есть уже готовые кубики в ТСЛаб 2.0: сохранить в глобальный кеш какие-то данные, прочитать из ГК какие-то данные.

Читать можно, естественно, из любого другого агента.


2. Если Вам чистят кеш -- увеличьте настройку программы "Размер памяти для оптимизации".
По дефолту там 256 МБайт -- этого не хватает на жизнь.
Я ставлю 4 ГБайта или 8 Гбайт если на сервере достаточно памяти.


3. Чтобы объект не чистился из кеша (неважно, локального или глобального и не требовал записи на диск -- что медленно)
нужно его завернуть в обертку
NotClearableContainer<T>(T content)

Грубо говоря примерно так:

var veryImportantObject = Prepare();
var container = new NotClearableContainer(veryImportantObject);
Context.StoreObject(key, container);

Ну и в обратную сторону все должно быть понятно.
Автор: _ID_

Re: Кубики для загрузки и выгрузки данных через КЕШ - Fri Apr 12 2019 03:10 PM

Вроде уже сам кубики сделал, но про NotClearableContainer не знал. Спасибо за информацию.