2012-02-28 8 views
4

私は、メモリに照会するための変数に大量の株式相場データを保存しようとしています。株式IDの最新の市場データをすばやく見つけ出し、特定の株式の特定の長さの履歴を照会できるようにする必要があります。多くの株価データをメモリに保存する最良の方法(可変)

たとえば、在庫ID 5342(常に数値)のデータが数秒ごとに受信される可能性があります。元の考えでは、SortedDictionaryの配列を作成し、SortedDictionaryキーを引用符のDateTimeとし、その値市場データのカスタム構造です。そして、外側の配列には、在庫のIDになります...ので、私は呼び出すことができます。

RecentPrice = PriceData[StockID].Values.Last(); 

または私は私が探している時間範囲よりも古いキーを打つまで、私はその株式のSortedDictionaryを逆方向に反復することができます。

しかし、より良い(より効率的な)方法が必要なように感じます。何か案は?

編集: SortedDictionariesの配列の代わりに... SortedDictionariesの辞書が良いかもしれません。たとえば :その後、

public static Dictionary<int, SortedDictionary<DateTime, StockData>> PriceData = 
    new Dictionary<int, SortedDictionary<DateTime, StockData>>(); 

RecentPrice = PriceData[StockID].Values.Last(); 

ありがとう!

答えて

2

一般的な辞書やハッシュテーブルは、完全一致に適しています。しかし、 "Xよりも前の最初の日時"が必要な場合、検索はバイナリ検索であるため、ソートされたリストが最もよく機能します。特に、データを追加していて、挿入していないためです。

+0

完璧、ありがとう! – Harry

0

StockIDの値が連続していて0から始まる場合は、配列で十分です。現実世界では、おそらくそうではないと思うので、辞書の辞書は良いです。私はこの種の問題に頻繁に使用しました。

0

SortedDictionaryの代わりにスタックを使用することを考えましたか?あなたのデータが常に正しい順序で挿入されていれば、ある種のカスタム実装はうまくいくでしょう。おそらくリンクされたリスト。

データが連続して入力される場合は、単純に配列に格納しないでください。この方法で、バイナリ検索を使用して希望の日付範囲にすばやく収束させることができ、挿入操作も非常に簡単です。しかし、少しのメモリを無駄にします...

0

新しい来るティッカーのデータが時間的な順序になるようにするには、SortedListを使用するのが良い方法です。それは、挿入されたデータの挿入および除去のために、より少ないメモリを消費し、より速く消費する。

また、データのさまざまなクエリが必要な場合。メモリ内のデータベースが良い選択です。私はSqlLiteを使用して、私のプロジェクトの1つで同様の機能を実行し、SQLを使用することができるため、さまざまな要件を処理します。

関連する問題