gpt4 book ai didi

.net - 加速 VB.Net 2008 中的字典循环

转载 作者:行者123 更新时间:2023-12-01 08:16:28 25 4
gpt4 key购买 nike

我有一个流程可以导入每日的产品注册文件,并将它们添加到我们的数据库中。最初,此过程会针对每条记录多次查询数据库以确定如何处理数据。

为了加快此过程并防止尝试使用使用相同数据库的报告站点的人可能出现的任何超时问题,我更改了代码以将一些表下拉到字典中,并且然后遍历它们以查看该客户/地址/经销商是否存在,如果存在,则从字典的键中提取 Id,如果不存在,则将其插入表中,然后再插入字典中。

但是,我目前发现它比我为每次注册多次查询数据库运行。我能想到的一个可能原因是我的词典非常大(一个有 800 万个条目,另一个有 1100 万个条目)。

这是我正在做的一个例子:

    For Each kvp As KeyValuePair(Of Int64, String) In dCust
If kvp.Value = firstName & "|" & lastName & "|" & companyName & "|" & addrId & "|" & typeID & "|" & phone & "|" & email Then
custId = kvp.Key
Exit For
End If
Next

这本词典中有大约 1100 万条记录。

我的一个同事的一个想法是在循环之前运行 Dictionary.ContainsValue() 以查看它是否存在。如果不是完全跳过循环。如果运行速度比循环本身快,我只想尝试这个,如果它们花费相同的时间,我看不出基本上运行循环两次有什么意义。

所以我的问题是:

  • 我是不是在最有效的方法?
  • 会不会更快在之前运行 Dictionary.ContainsValue()尝试循环,或者将系统将它们解释为相同事情,从而使我的时间加倍?
  • 还有什么我应该寻找的吗?

最佳答案

一个明显的小优化是在循环外一次执行firstNamelastName 等的连接.目前,您在循环的每次迭代中进行串联,这显然比它可能的要慢。

不,使用 ContainsValue 不会更快 - 仍然需要进行线性搜索。

明显的 优化是反转字典 - 创建一个 Dictionary(Of String, Int64),它基本上具有每个字符串值的 ID。目前您没有使用字典的天然优势 - 您基本上是将其视为键/值对列表。

您实际上是否也以正常方式使用字典(按键查找)?

关于.net - 加速 VB.Net 2008 中的字典循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037301/

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