C#GroupJoin效率

时间:2010-05-18 10:03:36

标签: c# .net join compare

不使用GroupJoin:

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;

使用GroupJoin:

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 {}) };

这两件中的哪一件效率更高?

2 个答案:

答案 0 :(得分:1)

没有测试,你真的不知道。根据经验,在LINQ中完成的任何事情都比手动完成的要慢。额外的迭代器和委托调用确实有它们的成本。

然而,对于大多数实际目的,我认为它们的性能相同。如果表现真的有所不同(即你处于一个非常关键的障碍,或者你注意到减速),你肯定想要衡量。

答案 1 :(得分:0)

你真的关心这种微观化吗?你的代码会稍微快一点,但只有当你处理大量数字时才会注意到。

破解反射器,看看groupJoin是如何工作的