Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按性能优化的C集合组_C#_List_Linq_Collections - Fatal编程技术网

C# 按性能优化的C集合组

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

我有一个低于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
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条记录,这只需要几毫秒。