我通过Observable接收一系列对象。进入的对象可能是基于PartNumber属性的重复,所以我必须检查以确保我没有在列表中获得重复。我收到了数百万个零件编号,因此列表中的任何查询都是昂贵的,因此我们不希望频繁运行查询。
这是OnNext的实现
void OnNext(Product p)
{
if (!products.Any(x => x.PartNumber.Equals(p))) /// Very costly query
{
products.Add(p);
{
}
对于我收到的每一个对象,我必须运行那个代价高昂的查询,以确保我不添加重复项...有没有其他方法来挽救马力?
答案 0 :(得分:3)
使用您自己的HashSet<T>
,或者只使用Rx Distinct
运算符(在内部使用HashSet):
productSource.Distinct(part => part.PartNumber).Subscribe(OnNext);