作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里读到,遍历字典通常被认为是滥用数据结构并使用其他东西。
但是,我无法想出更好的方法来完成我想做的事情。
当一个标签被扫描时,我使用它的 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
.
您可以按如下方式重构您的代码流:
tagsDetectedInMoreThanTwoZones
创建独占锁避免 B..true
,将其添加到 tagsDetectedInMoreThanTwoZones
.tagsDetectedInMoreThanTwoZones
的锁定.tagsDetectedInMoreThanTwoZones
创建独占锁避免不止一个线程试图处理它们。tagsDetectedInTwoOrMoreZones
.tagsDetectedInMoreThanTwoZones
中的每个标签获取当前字典中的区域。tagsDetectedInMoreThanTwoZones
.tagsDetectedInMoreThanTwoZones
的独占锁.现在,您将迭代那些您已知且已在多个区域中检测到的标签!
从长远来看,您甚至可以按区域进行分区,这样您就永远不会得到 tagsDetectedInMoreThanTwoZones
set 有太多的项目需要迭代,并且每个 set 都可以由一个专用线程使用!
关于c# - 字典使用不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46004149/
我正在编写一个 native iOS 7 应用程序,需要从 JSON api(由我控制)检索数据。 JSON 输出示例如下: { "id" : "544", "name" : "1900 Green
我是一名优秀的程序员,十分优秀!