【问题标题】:Tasks and WaitAll/WhenAll任务和 WaitAll/WhenAll
【发布时间】:2014-09-27 04:55:38
【问题描述】:

你能帮我加速/优化这段代码吗:

var keys = xRoot.Elements("key").Select(key => new { ID = int.Parse(key.Attribute("id").Value), VerificationCode = key.Attribute("verificationCode").Value });

var tasks = keys.Select(key => EveOnlineClient.GetAccountStatusAsync(key.ID, key.VerificationCode));

var tasks2 = keys.Select(key => EveOnlineClient.GetAPIKeyInfoAsync(key.ID, key.VerificationCode).ContinueWith(x =>
    {
        var characters = x.Result.Characters;

        var tasks3 = characters.Select(character => EveOnlineClient.GetCharacterSheetAsync(key.ID, key.VerificationCode, character.ID));
        var tasks4 = characters.Select(character => EveOnlineClient.GetSkillInTrainingAsync(key.ID, key.VerificationCode, character.ID));

        Task.WaitAll(tasks3.ToArray());
        Task.WaitAll(tasks4.ToArray());
    }));

await Task.WhenAll(tasks.Concat(tasks2));

【问题讨论】:

  • 你做了什么来表明你需要优化这段代码?瓶颈是什么?
  • 您好,欢迎来到 StackOverflow!看起来您正在寻求帮助以优化您的代码。您应该在codereview.stackexchange.com 上发布此问题以获取优化帮助。

标签: c# asynchronous win-universal-app


【解决方案1】:

如果我可以提出一个建议。我发现 WHEN APPLICABLE,使用列表提供的意义不大,但处理速度更快,分配的内存更少。 .ToList() 虽然它本质上归结为相同的格式,因为它动态存储其信息,但从长远来看,往往会在堆上提供更少的分配内存。在查看有关列表与数组的其他问题时,我了解到节省可能是微不足道的时间和内存的目标和本质上的必要性[尽管可能重要时间和内存,是分析您的代码和看看从长远来看哪个更明显。

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多