У вас не стоит Flash Player
Настройки
#60498 - Fri Jan 31 2014 11:04 PM Связь между скриптами
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Добрый день!
Прошу подсказать опытных программистов. Как правильнее реализовать передачу данных из одного скрипта в другой?
Через текстовый файл или через SQL?

Наверх
#60501 - Sat Feb 01 2014 07:51 AM Re: Связь между скриптами [Re: Kermit]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
через методы GlobalStoreObject/GlobalLoadObject
Но если нужно сохранять данные всегда, тогда быстрее и проще через файл. Даже можно бинарный


Отредактировано ra81 (Sat Feb 01 2014 06:03 PM)
_________________________
__


Наверх
#60502 - Sat Feb 01 2014 02:04 PM Re: Связь между скриптами [Re: ra81]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Спасибо за подсказку!
Еле нашел где этот метод.
TSLab.Script.Handlers.IContext.StoreGlobalObject
Оно?
А что означает " Данные в кеше могут быть стерты, если программе не хватает памяти." Это в случае, когда и оперативка и файл подкачки забит? Насколько часто может случаться такая ситуация?

Наверх
#60505 - Sat Feb 01 2014 06:03 PM Re: Связь между скриптами [Re: Kermit]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Kermit
Спасибо за подсказку!
Еле нашел где этот метод.
TSLab.Script.Handlers.IContext.StoreGlobalObject
Оно?
А что означает " Данные в кеше могут быть стерты, если программе не хватает памяти." Это в случае, когда и оперативка и файл подкачки забит? Насколько часто может случаться такая ситуация?

Да все верно. Прошу простить за не очень нормальный ответ smile.
Насчет стирания данных вопрос сложный. Используйте 64 битную версию. Кэш для скриптов в настройках поставьте побольше и 99.99% что проблему не поймете. Не встречалась она в общем такая проблема пока еще у меня
_________________________
__


Наверх
#60521 - Mon Feb 03 2014 02:21 PM Re: Связь между скриптами [Re: ra81]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Пытаюсь записать и считать скользящую из кеша

Фрагмент кода исходного скрипта, работает без ошибок
// Расчет скользящей
this.SMA1_h.Period = 2000;
this.SMA1_h.Context = ctx;
IList<double> SMA = ctx.GetData("SMA", new[] { SMA1_h.ToString() }, delegate { return SMA1_h.Execute(CL); });

//Запись в кеш
SMA1_h.Context.StoreGlobalObject("SMA2000", SMA);

Читающий скрипт имеет код:

IList<double> SMAG = (IList<double>)SMA.Context.LoadGlobalObject("SMA2000");

Выдает ошибку, что нет объекта на который ссылка.

Где я накосячил?

Наверх
#60529 - Tue Feb 04 2014 08:07 AM Re: Связь между скриптами [Re: Kermit]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Kermit
Пытаюсь записать и считать скользящую из кеша

Фрагмент кода исходного скрипта, работает без ошибок
// Расчет скользящей
this.SMA1_h.Period = 2000;
this.SMA1_h.Context = ctx;
IList<double> SMA = ctx.GetData("SMA", new[] { SMA1_h.ToString() }, delegate { return SMA1_h.Execute(CL); });

//Запись в кеш
SMA1_h.Context.StoreGlobalObject("SMA2000", SMA);

Читающий скрипт имеет код:

IList<double> SMAG = (IList<double>)SMA.Context.LoadGlobalObject("SMA2000");

Выдает ошибку, что нет объекта на который ссылка.

Где я накосячил?


А как вы определили что данные уже записаны перед тем как вы их читаете? В ТСлабе нигде нет гарантий о том что скрипты выполняются в каком-то порядке. Поэтому вам придется гадать, была ли запись в кэш или еще не было. Ну или дату вставлять. Или какой другой идентификатор.
Полагаю что одну проблему вы решили и заработали еще парочку smile
_________________________
__


Наверх
#60557 - Fri Feb 07 2014 11:16 AM Re: Связь между скриптами [Re: ra81]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
О да, на каждом шагу по 5 проблем.
Решил уже для начала реализовать через файл. В принципе работает, но довольно часто возникает ошибка у читающего скрипта, о том что файл занят другим процессом. Может я не прав, но по моим ощущениям причина в том, что пишущий скрипт не сразу закрывает файл после записи. Для записи использую статический метод File.WriteAllText().
Как реализовать принудительное закрытие для него? Все, что я читал про IDisposable и Using, касается объектов.
Или причина в ошибки в другом может быть?

Наверх
#60570 - Sun Feb 09 2014 08:51 PM Re: Связь между скриптами [Re: Kermit]
nikifor Offline
enthusiast

Registered: Thu Jun 06 2013
Записи: 378
а использовать аксессовский файл не пробовал?

Наверх
#60572 - Mon Feb 10 2014 11:16 AM Re: Связь между скриптами [Re: nikifor]
uuzzeerr Offline
veteran

Registered: Thu Sep 29 2011
Записи: 1446
действительно, Microsoft Jet интегрирован в винду начиная с win2000. без установки access позоляет обращаться к mdb файлу не заморачиваясь.

Наверх
#60578 - Mon Feb 10 2014 12:06 PM Re: Связь между скриптами [Re: uuzzeerr]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Насколько я понимаю, Access - это тот же SQL только вид в профиль. У меня был вопрос в принципе выбора текстовый файл или СУБД в качестве транзитного средства между скриптами.
Я кстати, тут писал, что по прочтению примеров реализаций работы с файлами в C#, понял свою ошибку и сделал более стабильную чтение/запись. Но куда-то пропало сообщение c форума.
Сегодня еще протестирую передачу и если не будет ошибок, выложу фрагменты кода. Может быть будет полезным, для других таких как я - начинающих.

Наверх
#60581 - Mon Feb 10 2014 12:38 PM Re: Связь между скриптами [Re: Kermit]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
проблема с блокировкой файла причтении записи решается путем создания FileStream и указания способа доступа и шэаринга. А дальше уже создавайте StreamReader/StreamWriter Тогда можно будет одновременно все делать. Но через файл работать, не избавляет вас ни от одной проблемы описанной выше smile. Все будет совершенно так же. Неясно записано или нет. Считано или нет.

Работа через файл БД проблему блокировки файла конечно снимает, за счет блокировки таблицы на запись с возможностью чтения. Но это уже движок БД сам делает. Но опять же не избавляет от проблем в моем посте выше.
_________________________
__


Наверх
#60618 - Mon Feb 10 2014 09:50 PM Re: Связь между скриптами [Re: ra81]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Точно! Значит правильные вещи читал. smile

Пример передающий последнее значение скользящей из одного скрипта в другой.
Код для записи
Code:
 res = SMA.Last();
            string sr = res.ToString();
            FileInfo f = new FileInfo("C:\\forscript.txt");
            using (FileStream fs = f.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
            {
                using (StreamWriter sw = new StreamWriter(fs))
                {
                sw.WriteLine(sr);
                }  
            }


Код для чтения
Code:
FileInfo f = new FileInfo("C:\\forscript.txt");
            using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using(StreamReader sr = new StreamReader(fs))
                {
                    SMA = sr.ReadLine();
                }
            }

Наверх


Moderator:  ViL, sar