2012-02-28 125 views
4

我试图将大量的股票市场报价数据存储到变量中,以便在内存中进行查询。我需要能够快速找出股票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 2012-02-28 20:20:29

0

如果您的StockID值是连续的并从零开始,则数组可能就足够了。在现实世界中,我想他们可能不是,所以字典词典是好的。我经常使用它们来解决这类问题。

0

你有没有想过使用堆栈而不是SortedDictionary?如果您的数据总是以正确的顺序插入,某种自定义实现可能会有效。也许是一个链表。

如果您的数据按顺序进入,为什么不直接将其存储在数组中?这样,您就可以使用二进制搜索快速收敛到期望的日期范围,并且插入操作也非常快捷。它确实浪费了一点内存......

0

如果您可以确保新来的股票数据按时间顺序排序,那么SortedList是一个更好的选择。它消耗更少的内存,更快地插入和删除已排序的数据。

此外,如果你需要各种查询的数据。内存数据库是一个更好的选择。我使用SqlLite在我的一个项目中执行类似的功能,它可以很好地处理不同的需求,因为我可以使用sql。

相关问题