C # GroupJoin эффективность - PullRequest
1 голос
/ 18 мая 2010

без использования 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 ]

1 голос
/ 18 мая 2010

Без тестирования вы действительно не сможете знать. Как правило, все, что делается в LINQ, медленнее, чем то же, что делается вручную; дополнительные итераторы и вызовы делегатов имеют свои затраты.

Однако для большинства практических целей я бы посчитал их равными по производительности. Если производительность действительно имеет значение (т. Е. Вы находитесь в очень критическом блоке, или вы заметили замедление), вы определенно захотите измерить.

0 голосов
/ 18 мая 2010

Вы действительно заботитесь об этой микроптимизации? Ваш код будет немного быстрее, но заметен только тогда, когда вы имеете дело с большими числами.

Отключите отражатель и посмотрите, как работает groupJoin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...