我的应用程序中有一些层。这些层遵循这样的结构:公司有定居点,定居点有部门,部门有机器,机器正在生产物品,机器需要工具来生产物品,......在这个层次结构的最末端有条目有多少物品可以用工具的特定部分(称为切割工具)生产。基于此,可以计算统计量。在每一层上,都会添加下一层的统计结果。看看这张图:
在每一层上,都会显示一个统计信息。例如:用户导航到第二层(项目)。有10个项目。用户可以看到显示每个项目成本的饼图。这些成本是通过添加项目工具(下一层)的所有成本来计算的。工具的成本是通过将“工具的一部分”的所有成本相加来计算的……我知道这有点复杂,所以如果有任何问题,请向我询问更详细的解释。
现在我的问题:要计算一个项目的成本(为机器、工具、... => 图表上的每一层提供相同的统计数据),我需要获取该项目的所有生命周期。所以我使用递归调用来跳过项目和生命周期之间的所有层。这工作得很好,但我使用了很多 SelectMany-linq 命令。结果,性能极差。我已经考虑过连接或过程(存储在数据库中)来加快速度,但到目前为止我还没有体验过哪些技术像数据库。所以我想问你,你会怎么做?目前我正在使用类似的东西:
public IEnumerable<IHierachyEntity> GetLifetimes(IEnumerable<IHierachyEntity> entities)
{
if(entities is IEnumerable<Lifetime>)
{
return entities;
}
else
{
return GetLifetimes(entities.SelectMany(x => x.Childs))
}
}