我正在解析一个在线提要(tcp 中继),它每秒发送大约 30-50 条消息(300-500 行数据)。消息包含 2 种类型的信息:订单和历史。
因此,对于orders,每个人都有一个唯一的 ID,我得到了:
private static Dictionary<long,MarketOrder> MarketOrders = new Dictionary<long,MarketOrder>();
我在订单进来时将订单插入其中。数据来自缓存文件,因此消息可以包含旧数据并且必须被过滤掉。我目前正在这样做:
if (MarketOrders.ContainsKey(order.OrderID))
{
// If record exists in a dictionary add hits and overwrite the object if newer.
int hits = MarketOrders[order.OrderID].Hits;
if (MarketOrders[order.OrderID].LastUpdated < order.LastUpdated)
{
MarketOrders[order.OrderID] = order;
}
MarketOrders[order.OrderID].Hits = hits + 1;
}
else
{
// If not, add new one
order.Hits = 1;
MarketOrders.Add(order.OrderID, order);
}
这在 BackgroundWorker 进程中运行,当字典项计数达到 2500 时,将对其进行深度克隆(使用二进制序列化程序)、清除并启动另一个后台进程,将克隆副本插入数据库。一旦字典被清除,就会再次插入订单。所以基本上我试图尽可能多地接收并分批插入数据库。
我正在尝试对历史数据做类似的事情。没有唯一的 ID,唯一性来自<int, int, DateTime>
值的组合。
我需要一种从这 3 个值生成唯一键的快速方法,因此我可以像处理订单一样将其存储在字典中,或者另一种存储和过滤该数据的方法。
有什么建议么?我的目标是 .NET 4.0。