Переменная списка в WinForm C # - PullRequest
0 голосов
/ 11 июля 2011

Я все еще изучаю C # .Net 4, и это мой первый WinForms, поэтому, пожалуйста, будьте добры.

Продолжая работу над моим проектом, мой финансовый DataFeed направляется в мое приложение с помощью «асинхронных сокетов?». В любом случае, данные, которые я получаю, представляют собой данные по тикам за тик, которые в основном составляют 1 ордер / транзакция. Так что теперь мне нужно строить бары с этим тиком по тиковым данным, в частности, Range Bars.

Моя проблема в том, что я не хочу идти в базу данных и получать эти данные, поэтому я пытаюсь сделать это в памяти, как переменную списка. В конце концов, эта система на главном сервере выполнит все подсчеты чисел и т. Д. И будет иметь клиентов, подключенных через сокеты, для опроса или установки собственных предопределенных алгоритмов для входящих данных и построения своих собственных диаграмм с использованием различных диапазонов и индикаторов.

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

Как бы я это реализовал?

У меня уже есть мой класс под названием Tick

class Tick
{
    public double Last { get; set; }
    public double Bid { get; set; }
    public double Ask { get; set; }
    public double BidSize { get; set; }
    public double AskSize { get; set; }
    public DateTime TimeStampInternal { get; set; }
    public int DTNTickID { get; set; }
    public int UpdateTypeID { get; set; }
} 

Я думаю о

Static List<Tick> Ticks 

но я не думаю, что это путь, потому что

  1. Мне нужно иметь возможность удерживать только определенное количество тиков, и по мере поступления новых данных старые данные выбрасываются, FIFO для сокращения использования памяти.
  2. Я смогу хранить только 1 статический список, и мне нужно что-то динамическое, например, иметь список для каждого подключаемого пользователя, который будет идентифицирован только для них.

Пожалуйста, помогите мне правильно спроектировать это с лучшими практиками для скорости и эффективности.

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Похоже на круговой буфер - это то, что вы ищете.

http://circularbuffer.codeplex.com/

Или, может быть, очередь.

0 голосов
/ 11 июля 2011

Надеюсь, я правильно понимаю, что вы хотите, поэтому вот очень псевдокод :

public class User {

     private UserTickList<Tick> _userTicks = new UserTickList<Tick>();

     public void AddUserTick(Tick t) {
              _userTicks.Add(t);
     }

     /*remove, update if need*/
}

 public class UserTickList {

    private List<Tick> _list = new List<Tick>();

    public void AddTick(Tick tick) {
         if(_list.Count == 10){
               /*perform what you need*/
         }
         else 
           _list.Add(tick);
    }
 }

Я повторяю, что это, вероятно, не скомпилирует, а просто даст представление о том, как это может выглядеть.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...