当我在 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/