我们正在开发一种在 .Net 中进行股票建模的分析工具。
该工具的主要目标是运行模型 5 年,并对各种产品的 future 入库、出库和库存进行预测。
代码的主要工作流程是
1. 从数据库中获取数据。
2. 每个日期
过程数据(运行生产和库存模型)
3. 遍历完所有日期后,一起更新数据库中的所有数据。
所以主要只有两个数据库调用,最初我们获取数据集中的所有数据,然后我们在 Ram 中处理它并且不进行数据库调用。
我们面临的问题是,运行一个模型需要将近一个小时才能运行 1 年。我们的基准是在 5 分钟内运行模型 5 年。
我们已经研究这个问题将近一个月了。目前我们已经能够实现10分钟跑1年的模型。以下是我们发现的事情。
- 从数据集中获取数据时,如果表中包含所有五年数据,则很难实现,因此我们将数据集划分为每月循环,现在我们一次运行一个月的模型。这给了我们最大的速度提升。
- 尝试减少每天运行的模型内部的循环。这并没有给我们带来多大的改善。
您可以从以下链接下载一个 rar 文件。
http://dl.dropbox.com/u/4546390/iPlanner.rar
它包含三个文件。
iPlanner Tables.xls :它给出了数据库设计的想法。
iPlanner Logic.xls : 谈生产模型、出货模型和实际值处理的表和逻辑。我认为最重要的是看生产模型,这会让你对模型每天做什么有一个简要的了解。
Common.cs :它具有调用生产模型功能,一切都从这里开始。你也可以检查一下。
该模型以前是在 excel 中用 excel 编写的,过去 5 年需要 2 分钟。迁移到 .Net 的原因是为了拥有更多的共享功能和类似软件的外观。
我正在尝试找出可以改进的方法。
如果需要更多信息,请告诉我。
提前致谢
最佳答案
如果每个日期的计算都是独立的,这听起来像是 map/reduce 的一个很好的应用。您对并行化此计算的想法进行了多少探索? 60 个 Hadoop 处理器,在五年窗口中每个月一个,可以缩短它的工作时间。
关于.net - 基于 .Net 的建模应用程序的速度改进,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5978488/