gpt4 book ai didi

c# - 如何从 3 个值 创建唯一 ID?

转载 作者:太空狗 更新时间:2023-10-29 21:50:54 24 4
gpt4 key购买 nike

我正在解析每秒发送大约 30-50 条消息(300-500 行数据)的在线提要(TCP 中继)。消息包含 2 种类型的信息:订单历史

因此,对于订单,每个订单都有一个唯一的 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> 的组合值(value)观。

我需要一种从这 3 个值生成唯一键的快速方法,这样我就可以像处理订单那样将其存储在字典中,或者使用其他方法存储和过滤该数据。

有什么建议吗?我的目标是 .NET 4.0。

最佳答案

Dictionary 的键不必是简单类型。在您的情况下,最简单的解决方案是使用 Tuple<int, int, DateTime>作为关键。另一种方法是创建正确实现 Equals() 的自定义类型和 GetHashCode() (理想情况下也是 IEquatable )。

你可以在数据库端做同样的事情,大多数数据库都支持compound keys .

关于c# - 如何从 3 个值 <int、int、DateTime> 创建唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com