У вас не стоит Flash Player
Настройки
#84464 - Fri Feb 01 2019 03:32 PM Кубики для загрузки и выгрузки данных через КЕШ
_ID_ Offline
journeyman

Registered: Wed Feb 16 2011
Записи: 65
Требуется реализовать возможность сохранения и подгрузки в агенте и в скрипте расчетов между скриптами и предыдущими расчетами.
Подробности в личку, бюджет обсуждаем

Наверх
#84479 - Mon Feb 04 2019 01:06 AM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8134
Импорт и экспорт значений из агента в скрипта, из скрипта в агент, из агента в агент будет доступно в следующей версии программы 2.1, через два месяца выйдет программа.

Наверх
#84484 - Mon Feb 04 2019 10:37 AM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: ViL]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Дак есть же StoreGlobalObject и LoadGlobalObject. Или в кубиках сейчас их нет?

Наверх
#84492 - Mon Feb 04 2019 02:25 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: ViL]
_ID_ Offline
journeyman

Registered: Wed Feb 16 2011
Записи: 65
Спасибо за информацию. А уже есть бетта версия, с функционалом кеша? Готов поучаствовать в тестировании.

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

Наверх
#84494 - Mon Feb 04 2019 02:37 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
_ID_ Offline
journeyman

Registered: Wed Feb 16 2011
Записи: 65
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);
}
}

Наверх
#84495 - Mon Feb 04 2019 06:18 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
OldMo Offline
member

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

Наверх
#84499 - Mon Feb 04 2019 09:33 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: OldMo]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Вспомнил. Обычно StoreGlobalObject вроде бы нормально работает, но иногда нет frown У меня в тех поддержке с 17 декабря заявка висит...

Наверх
#84513 - Thu Feb 07 2019 08:08 AM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: OldMo]
_ID_ Offline
journeyman

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

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

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

Наверх
#84518 - Thu Feb 07 2019 04:01 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
OldMo Offline
member

Registered: Wed Feb 08 2017
Записи: 194
Источник данных подключен к кубику "Внешний скрипт". Так?

Наверх
#84519 - Thu Feb 07 2019 05:57 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: OldMo]
_ID_ Offline
journeyman

Registered: Wed Feb 16 2011
Записи: 65
Да, заработало. Спасибо!!!

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

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

Наверх
#84523 - Fri Feb 08 2019 09:53 AM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
OldMo Offline
member

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

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

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

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

Наверх
#84545 - Mon Feb 11 2019 11:47 AM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: OldMo]
_ID_ Offline
journeyman

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

Наверх
#84563 - Tue Feb 12 2019 03:04 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: _ID_]
OldMo Offline
member

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

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


Отредактировано OldMo (Tue Feb 12 2019 03:05 PM)

Наверх
#84679 - Sat Mar 02 2019 04:34 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: OldMo]
Option Wizard Offline
writer

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

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


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


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

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

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

Ну и в обратную сторону все должно быть понятно.
_________________________
Скидка на опционной криптобирже Deribit:
https://www.deribit.com/reg-2200.8947?q=home
Да пребудет с вами Вола!

Наверх
#84962 - Fri Apr 12 2019 03:10 PM Re: Кубики для загрузки и выгрузки данных через КЕШ [Re: Option Wizard]
_ID_ Offline
journeyman

Registered: Wed Feb 16 2011
Записи: 65
Вроде уже сам кубики сделал, но про NotClearableContainer не знал. Спасибо за информацию.

Наверх


Moderator:  ViL, captian, sar