C# 按性能优化的C集合组
我有一个低于LINQ的查询,它需要大约一分钟的时间来根据我大约65000条记录的数据进行分组。有没有办法进一步优化以缩短时间C# 按性能优化的C集合组,c#,list,linq,collections,C#,List,Linq,Collections,我有一个低于LINQ的查询,它需要大约一分钟的时间来根据我大约65000条记录的数据进行分组。有没有办法进一步优化以缩短时间 var grouped = (from T1 in dataCollection.trancollection group T1 by new { T1.Name, T1.ExternalID, T1.AccountNumber, T1.Code, T1.Location, T1.Date, T1.CurrencyCode, T1.StatusName } into g
var grouped = (from T1 in dataCollection.trancollection
group T1 by new { T1.Name, T1.ExternalID, T1.AccountNumber, T1.Code, T1.Location, T1.Date, T1.CurrencyCode, T1.StatusName } into g
select new
{
Id = g.Key,
groupedDocs = g,
Amount = g.Sum(x => x.TranAmount),
USDAmt = g.Sum(x => x.USDTranAmount)
}).ToList();
此集合的数据通过另一个API调用提供。是否有其他方法来提高性能?我的收藏类型是IReadOnlyCollection
谢谢你的帮助 假设这一切都在内存中运行,我们可以尝试优化两个调用,将其相加为一个聚合调用,但我不确定这是否会更快:
var grouped = (from T1 in dataCollection.trancollection
group T1 by new { T1.Name, T1.ExternalID, T1.AccountNumber, T1.Code, T1.Location, T1.Date, T1.CurrencyCode, T1.StatusName } into g
let sumPair = g.Aggregate(new { SumAmount = 0.0, SumUSD = 0.0 }, (sump, x) => new { SumAmount = sump.SumAmount + x.TranAmount, USDAmt = sump.USDAmount + x.USDTranAmount })
select new {
Id = g.Key,
groupedDocs = g,
Amount = sumPair.SumAmount,
USDAmt = sumPair.SumUSD
}).ToList();
你能按更少的属性分组吗,也许只是外部ID?我敢肯定这会导致你的ORM对组键进行一次查询,然后对每个组进行一次查询,也称为N+1问题,因为你要求的是groupedDocs=g。由于您仍在加载所有行,因此只需选择需要进入组的字段加上TranAmount和USDTranAmount并在内存中进行分组可能会更有效。您需要找出哪一点花费了大量时间。调用API或LINQ。所以,让我们先从API中获取所有数据,而不使用LINQ。Hi-Slai-我的集合几乎有30个属性,但仅按10个属性进行分组。hiule-仅此group by而非API调用所花费的时间。因为,一旦我的API调用完成,集合就会被加载,假设这都是在内存中运行的,只有65000条记录,这只需要几毫秒。