2013-07-15 74 views
0

我有一个小集合(约10个物品),每个物品都有一个中等集合(从200到500)链接的项目(多对一关系,如果我是正确的)。收集物品的最快速度收集,每个物品都有要迭代的物品集合

我正在寻找一种方式,通过这样的列表进行迭代:

var cardSetQry = from cs in mDb.CARD_SET 
       select cs; 

List<CARD_SET> listCardSets = cardSetQry.ToList(); 

Dictionary<string, List<CARD>> cardsList = new Dictionary<string, List<CARD>>(); 

foreach (var cardSet in listCardSets) 
{ 
    CARD_SET set = cardSet;  
    var cardQry = from c in mDb.CARD 
        where c.CARD_SET_IDE == set.CARD_SET_IDE 
        select c; 

    if (cardQry.Any()) 
    { 
     HashSet<CARD> listCards = new HashSet<CARD>(cardQry.ToList());  
     foreach (var card in listCards) 
     { 
      card.CARD_MASTER_IDE = null; 
      card.CARD_CHILD_IDE = null; 

      mDb.SaveChanges(); 
     }  
     cardsList.Add(set.CARD_SET_NAME, listCards); 
    } 
} 

我使用dictionary,因为我需要两个卡中设定的名称和相关对象的名单,但我接受建议。这个方法在应用程序启动时被调用一次,并且必须迭代每个项目。

至于第二个列表(HashSet),我从上周开始使用它。小研究使我相信hashSet是一个快速收集类型。但我不知道它是如何工作的。

所以,问题是:为了实现我需要做的事情,最快使用的集合是什么,为什么?

+1

_什么是最快的藏品_几乎不是10x500的问题 –

+0

由于集合的大小?那么它会变得有趣,然后呢? – hsim

+0

从这个角度来看,最大的性能问题实际上是数据库调用。它看起来像遍历您调用数据库的项目以获取下一组结果。最好从数据库中检索所有卡片,然后对这些结果进行过滤。 – tlbignerd

回答

1

在这样一个小的收集速度是不是一个问题。如果你真的想把它映射为关键值,你应该使用Dictionary。否则,只需使用Hashset。 Comparison of Hashset list and dictionary

+0

啊,好的! :)在什么速度会成为一个问题? – hsim

+0

查看比较。 http://softscenario.blogspot.com/2009/05/performance-testing-of-dictionary-list.html – Ehsan

2

不管大小如何,您都会发现枚举HashSet<T>与列举List<T>的速度存在显着差异,这是值得怀疑的。

你使用的应该取决于你将如何使用它。如果您想要快速确定集合中是否有物品,请使用HashSet。否则,请使用ListHashSet有它的用途,但作为一个简单的顺序列表,它是矫枉过正。它也使用List的3倍或4倍的内存。

另外,创建HashSet时做什么cardQry.ToList()?你可以写new HashSet<CARD>(cardQry)

+0

啊,好的。关键是我不知道如何初始化一个HashSet,并且resharped允许我这样做。 – hsim

相关问题