这更像是一个技术性的“如何操作”或“最佳方法”问题。C#LINQ和涉及大型数据集的计算
我们目前需要从数据库中检索记录,将它们放入“内存”列表中,然后对数据执行一系列计算,即最大值,平均值和一些更具体的自定义统计数据。
将数据存入“内存中”列表并不成问题,因为我们使用NHibernate作为我们的ORM,它在从数据库检索数据方面表现出色。我正在寻求的建议是我们应该如何最好地对结果数据列表进行计算。
理想情况下,我想为每个统计量MaximumValue(),AverageValueUnder100(),MoreComplicatedStatistic()等等创建一个方法。当然,将所需的变量传递给每个方法并返回结果。这种方法还可以使单元测试变得轻而易举,并为我们提供出色的覆盖。
如果我们为每个计算执行一次LINQ查询,还是应该尽可能多地将每个统计方法的调用合并为尽可能少的LINQ查询,那么会有性能问题吗?例如,将数据列表传递给名为AverageValueBelow100的方法并没有什么意义,然后将整个数据列表传递给另一个方法AverageValueBelow50,只要这些方法可以有效地用一个LINQ查询执行。
如何在不牺牲性能的情况下实现高水平的粒度和分离?
任何建议......这个问题是否足够清楚?
最好的方法是对数据库执行查询,您可以从索引中获益,从而提高性能 –
真的吗?所以不是处理“内存中”,我们最好查询数据库。一些计算相当复杂,所以我不完全确定这将是最好的方法。 – Rowen
大多数数据库都更快 –