2010-05-18 55 views
1

不使用群组加入:C#效率群组加入

var playersDictionary = players.ToDictionary(player => player.Id, 
    element => new PlayerDto { Rounds = new List<RoundDto>() }); 

foreach (var round in rounds) 
{ 
    PlayerDto playerDto; 
    playersDictionary.TryGetValue(round.PlayerId, out playerDto); 

    if (playerDto != null) 
    { 
     playerDto.Rounds.Add(new RoundDto { }); 
    } 
} 

var playerDtoItems = playersDictionary.Values; 

使用群组加入:

var playerDtoItems = 
    from player in players 
    join round in rounds 
    on player.Id equals round.PlayerId 
    into playerRounds 
    select new PlayerDto { Rounds = playerRounds.Select(playerRound => new RoundDto {}) }; 

这两个部件的效率更高?

+1

你的意思是高效?如果它有效,它的有效性。 – 2010-05-18 10:04:42

+0

是的,高效。对不起 – 2010-05-18 10:05:55

回答

1

没有测试,你真的不知道。作为一个经验法则,在LINQ中完成的任何事情都比手动完成的任何事情都慢;额外的迭代器和委托调用确实有其成本。

但是,对于大多数实际目的,我会认为它们在性能上是平等的。如果表现确实有所改变(即你处于一个非常关键的环节,或者你注意到放缓),你肯定会想要测量。

0

你真的关心这种微型化吗?你的代码会稍微快一点,但只有在处理大量数据时才会显着。

裂开反射器,看看groupJoin如何工作

+0

是的,大量的数字和高频率的信息是我处理的。了解GroupJoin的工作方式将会很棒。如果它使用嵌套循环比肯定效率低于第一个片段。 – 2010-05-18 10:33:47

+0

reflectttorrrrr,http://tinyurl.com/dhdvf9 – 2010-05-18 10:49:52