SmartQuant Discussion
http://www.smartquant.com/forums/

Сломался Global ?
http://www.smartquant.com/forums/viewtopic.php?f=65&t=10398
Page 1 of 1

Author:  valenock [ Mon Nov 26, 2012 2:23 pm ]
Post subject:  Сломался Global ?

Не могу понять, что происходит с Global в последнем OQ:
Code:
public class MyScenario : Scenario
{
   public override void Run()
   {
      Strategy.Global["test"] = 1;
      Console.WriteLine(   Strategy.Global.Count );
      Start();
   }
}

Code:
public override void OnStrategyStart()
{
            Console.WriteLine(   Strategy.Global.Count );
}


В сценарии Strategy.Global.Count возвращает 1, а в стратегии уже 0 - т.е. Global пустое.
Я что-то упустил ?

Author:  Pavel [ Mon Nov 26, 2012 3:14 pm ]
Post subject:  Re: Сломался Global ?

Подтверждаю подобное поведение в версии 3.5.4
Возможное решение:
Code:
public class MyScenario : Scenario
{   
    public override void Run()
   {
        var dic = Singleton<Hashtable>.GetInstance();
        dic["key"] = "Привет";
        Console.WriteLine("В сценарии = " + dic.Count);
        Start();
   }
}

Code:
public class MyStrategy : Strategy
{
   public override void OnStrategyStart()
   {
        var dic = Singleton<Hashtable>.GetInstance();
        Console.WriteLine("В стратегии = " + dic.Count);
        Console.WriteLine(dic["key"]);
   }
}

Вот код на Singleton<T>:
Code:
/// <summary>
    /// Синглтон
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public sealed class Singleton<T> where T: new()
    {
        readonly static T obj;

        static Singleton()
        {
            obj = (T)Activator.CreateInstance(typeof(T));
        }
       
        /// <summary>
        /// Получить экземпляр класса
        /// </summary>
        /// <returns></returns>
        public static T GetInstance()
        {
            return obj;
        }
    }

Author:  Baraz Sergey [ Mon Nov 26, 2012 4:40 pm ]
Post subject:  Re: Сломался Global ?

Здравствуйте, Global чистится каждый раз перед стартом проекта (когда в сценарии вызывается метод Start).

Решение, предложенное Павлом, должно сработать в обход Global.

С уважением,
Сергей.

Author:  valenock [ Mon Nov 26, 2012 8:12 pm ]
Post subject:  Re: Сломался Global ?

Павел, спасибо за красивое решение, но оно у меня не заработало. Сам про singleton забыл и пробовал static class - никак не смог добиться, чтобы его было видно и в сценарии и в стратегии. Такое ощущение, что у них разный namespace.

Пока передаю что надо через сериализацию и параметры стратегии типа string.

Сергей - а глобальная чистка Global это что-то новенькое или было всегда ?
Даже пока искал на форуме решение своей проблемы натыкался на куски кода с вызовом Global в сценариях.
Вот - первое в поиске - http://www.smartquant.com/forums/viewtopic.php?f=65&t=10356&p=33873&hilit=global#p33873

Author:  Pavel [ Mon Nov 26, 2012 9:16 pm ]
Post subject:  Re: Сломался Global ?

Quote:
Павел, спасибо за красивое решение, но оно у меня не заработало
Вам нужно код Синглтона скомпилировать в отдельную библиотеку и подключить ее к OpenQuant. Тогда все будет работать

Page 1 of 1 All times are UTC + 3 hours
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/