我们正在开发一种在.Net中进行库存模拟的anayltical工具。
该工具的主要目标是运行模型5年,并为各种产品的未来In,Out和Stock做预测。
代码的主要工作流程是 1.从数据库中获取数据。 2.对于每个日期 过程数据(运行生产和库存模型) 3.遍历所有日期之后,将所有数据一起更新到数据库中。
所以主要只有两个数据库调用,最初我们采用数据集中的所有数据,然后在Ram中处理它,不进行数据库调用。
我们遇到的问题是,运行一年的模型花了将近一个小时。我们的基准是在5分钟内运行模型5年。
我们一直在研究这个问题近一个月了。现在我们已经能够在10分钟内实现1年的运行模型。以下是我们发现的事情。 - 当从数据集中获取数据时,如果表格包含所有五年的数据,则很难确定,因此我们将数据集分为月度循环,现在我们一次运行一个月的模型。这给了我们最大的速度提升。 - 试图减少每天运行的模型内的循环。这并没有给我们带来太大的改善。
您可以从以下链接下载一个rar文件。 http://dl.dropbox.com/u/4546390/iPlanner.rar
它包含三个文件。
iPlanner Tables.xls:它提供了数据库设计的概念。 iPlanner Logic.xls:讨论表格和生产模型,装运模型和实际价值处理的逻辑。我认为最重要的是查看生产模型,这将简要介绍模型每天的工作。
Common.cs:具有Call Production Model功能,从一切开始。你也可以检查一下。
该模型以前曾在Excel中以excel编写,过去需要2分钟,为期5年。迁移到.Net的原因是拥有更多的共享功能并拥有像外观这样的软件。
我试图找出改进方法。
如果需要更多信息,请与我们联系。
先谢谢
答案 0 :(得分:2)
如果为每个日期完成的计算是独立的,这听起来像是map / reduce的一个很好的应用。你有多少探索了并行化这个计算的想法? 60年的Hadoop处理器,在五年的时间里每月一个,可以简单地完成它。
答案 1 :(得分:2)
首先:个人资料; p
我接下来要尝试的是将DataTable
从系统中取出,而采用与您的数据完全匹配的强类型类。虽然数据加载速度不是问题,但我会使用像dapper-dot-net这样的东西来尽可能高效地加载数据。
使用DataTable
,每个成员访问是间接的,并且必须通过内部查找,可能涉及拳击途中。通过使用静态绑定到实际数据属性(几乎总是内联到字段)来完成所有这些操作。不幸的是,这有点难以衡量,估计影响是非常重要的。