gpt4 book ai didi

c# - 批量更新字典内多条记录的属性 (VB.NET/C#)

转载 作者:行者123 更新时间:2023-11-30 22:51:49 25 4
gpt4 key购买 nike

我有一个字典(Long,Class),其中 Class 有多个属性(假设我们有一个名为 Updated as Boolean 的属性)。

我想立即将此 (Updated) 属性更新为 (True),假设所有奇数键记录(或基于任何特定规则)。这样做的最佳方法是什么?

我的想法是使用 Linq 来获取这些记录,然后(针对每个)获取它们,但是有没有更好的方法来做到这一点,比如在条件发生时进行批量更新(就像我们在数据库中所做的那样)?

我的方法示例如下。如果有更好的方法来进行这样的更新,将不胜感激......

谢谢

Dim ReturnedObjs = From Obj In Dictionary Where Obj.Key Mod 2 = 1
For Each item As KeyValuePair(Of Long, Class) In ReturnedObjs
item.Value.Updated = True
Next

最佳答案

首先,这听起来像是速度咆哮的明显案例:

https://ericlippert.com/2012/12/17/performance-rant/

第二个:

最好的方法是将其保存在数据库中。您不会通过为快速匹配而设计的索引来击败数据库查询的速度,方法是通过网络传输两次数据(一次获取数据,一次返回数据)和加倍搜索负载(一次获取所有奇数数据) , 一次更新您刚刚更改的所有内容)。我的一贯建议是始终在数据库方面保留尽可能多的工作。您的客户端代码将永远无法击败它。

第三:

如果您确实需要使用客户端处理:

现在我的很多答案取决于实现的细节、JiT 和一般编译器优化的工作方式等。

Foreach 使用的是枚举器,而不是集合。但是,如果您将一个集合提供给 foreaach,则会隐式创建一个 Enumerator。现在枚举器有两个属性:

  1. 如果集合发生变化,枚举器将失效。大多数人了解他们是因为他们遇到了这个问题。
  2. 这是一个额外的函数调用和一组用于访问集合的检查。所以这将是一个放缓。多少很难说,因为优化和 JiT 非常好。

所以您可能想改用 for 循环。

如果能把Dictionary变成一个集合,用Primary Key做Index,可能会快一点。但是 hat 有遇到很多关于数据的“枯燥法术”的危险,所以它在很大程度上取决于你的源数据。

关于c# - 批量更新字典内多条记录的属性 (VB.NET/C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58806385/

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