2012-03-18 2 views
2

я пытаюсь оптимизировать этот код:для в оптимизации

foreach (string id in ids) 
    { 
    MyClass x = myDictionary[id]; 
    foreach (var map in Maps) 
    { 
     if (x.id == map.SourceId || x.id == map.DestionationId) 
     { 
      //add id to a hashset 
     } 
    } 
    } 

если ids.count 1600 и Maps.Count составляет 300 000 в занимает около 10 минут, чтобы обработать.

Я пытался LINQ, но результаты не намного лучше:

var allIds = Maps.select(map => map.SourceId).Union(Maps.select(map => map.DestinationID)).Distinct(); 
    var toAdd = from id in Ids 
       join mapId in AllIds on id equals mapid 
       select id; 
    //create hashset based on toAdd collection. 

Может кто-нибудь мне точку к лучшему решению, и, если это возможно объяснить, почему LINQ в данном случае не намного быстрее?

Благодаря

+0

Возможно, вы захотите опубликовать это на http://codereview.stackexchange.com –

+0

Что такое Maps? –

ответ

5

У вас есть сложность O (countIds * countMaps), если вы сложите все карты в 2-х словарей проиндексированных источника и назначения, вы получите O (countIds + countMaps).

Смежные вопросы