c# custom group by 对于大型数据集真的很慢

标签 c# performance optimization

当我在 campaigns.Count() 为 200,000 的地方运行以下代码时,这段代码非常慢。

List<Campaign> listCampaigns = new List<Campaign>();
        foreach (var item in campaigns)
        {
            if (listCampaigns.Where(a => a.CampaignName == item.CampaignName && a.Term == item.Term).Count() == 0)
            {
                //this doesn't exist
                listCampaigns.Add(item);
            }
            else
            {
                //this exists already
                var campaign = listCampaigns.Where(a => a.CampaignName == item.CampaignName && a.Term == item.Term).First();
                campaign.TotalVisits += item.TotalVisits;
                List<Conversion> listConversions = item.Conversions.ToList();
                listConversions.AddRange(campaign.Conversions.ToList());
                campaign.Conversions = listConversions.ToArray();
            }
        }

有没有优化这段代码的部分或者使用其他方法来加速它?

如有任何建议,我们将不胜感激。谢谢。

最佳答案

这应该明显更快:

List<Campaign> listCampaigns = new List<Campaign>();
foreach (var g in campaigns.GroupBy(c => new { c.CampaignName, c.Term }))
{
    var campaign = g.First();
    campaign.TotalVisits = g.Sum(x => x.TotalVisits);
    campaign.Conversions = g.SelectMany(c => c.Conversions).ToArray();
    listCampaigns.Add(campaign);
}

关于c# custom group by 对于大型数据集真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173871/

相关文章:

c - 证明 : Pythagorean Triple algorithm is faster by Euclid's Formula?

c# - 如何使用 LINQ 解析此 XML?

c# - 如何发现设备是否连接到特定的串行 (COM) 端口?

c++ - Haskell Thrift 库在性能测试中比 C++ 慢 300 倍

mysql - WHERE 子句或 ON 子句中的 INNER JOIN 条件?

MySql 唯一索引与索引速度

c# - 如何从 WebAPI 中删除转义字符

c# - 如何将 asp.net ajax 工具箱自动完成中的选定值添加到标签?

ruby-on-rails - 大型项目的 sprockets 最佳实践

javascript - 无限循环检查时间