gpt4 book ai didi

c# - 字典使用不当?

转载 作者:行者123 更新时间:2023-11-30 20:17:12 26 4
gpt4 key购买 nike

我在这里读到,遍历字典通常被认为是滥用数据结构并使用其他东西。

但是,我无法想出更好的方法来完成我想做的事情。

当一个标签被扫描时,我使用它的 ID 作为键,值是它出现过的区域列表。大约每一秒我检查一下我字典中的标签是否在两个或更多区域中出现过,并且如果有,请将其排队进行一些计算。

for (int i = 0; i < TagReads.Count; i++)
{
var tag = TagReads.ElementAt(i).Value;
if (tag.ZoneReads.Count > 1)
{
Report.Tags.Enqueue(tag);
Boolean success = false;
do
{
success = TagReads.TryRemove(tag.Epc, out TagInfo outTag);
} while (!success);
}
}

我觉得在这里字典是正确的选择,因为可以查找很多标签,但这段代码的某些方面让我觉得很糟糕。

就效率而言。目前在我们的小规模测试环境中速度还不错,但在投入使用之前,我没有很好的方法来了解它如何在大规模环境中工作,因此我很担心。

最佳答案

我相信有一种不涉及迭代大字典的替代方法。

首先,你需要创建一个HashSet<T>您将存储在 2 个以上区域中检测到的那些标签的标签。我们称它为tagsDetectedInMoreThanTwoZones .

您可以按如下方式重构您的代码流:

A.每当您在一个区域中检测到标签时...

  1. 将标签和区域添加到主词典。
  2. 针对 tagsDetectedInMoreThanTwoZones 创建独占锁避免 B..
  3. 中的不良行为
  4. 检查 key 是否有多个区域。如果这是 true ,将其添加到 tagsDetectedInMoreThanTwoZones .
  5. 释放对 tagsDetectedInMoreThanTwoZones 的锁定.

B.每当您需要处理在多个区域中检测到的标签时...

  1. 针对 tagsDetectedInMoreThanTwoZones 创建独占锁避免不止一个线程试图处理它们。
  2. 迭代 tagsDetectedInTwoOrMoreZones .
  3. 使用 tagsDetectedInMoreThanTwoZones 中的每个标签获取当前字典中的区域。
  4. 清除 tagsDetectedInMoreThanTwoZones .
  5. 释放对 tagsDetectedInMoreThanTwoZones 的独占锁.

现在,您将迭代那些您已知且已在多个区域中检测到的标签!

从长远来看,您甚至可以按区域进行分区,这样您就永远不会得到 tagsDetectedInMoreThanTwoZones set 有太多的项目需要迭代,并且每个 set 都可以由一个专用线程使用!

关于c# - 字典使用不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46004149/

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