【问题标题】:Speed Improvement of a .Net Based Modelling Application基于 .Net 的建模应用程序的速度改进
【发布时间】:2011-08-24 02:58:17
【问题描述】:

我们正在.Net 中开发一种库存建模分析工具。

该工具的主要目标是运行一个模型 5 年,并对各种产品的未来进货、出库和库存进行预测。

代码的主要工作流程是 1.从数据库中获取数据。 2. 对于每个日期 过程数据(运行生产和库存模型) 3.遍历所有日期后,将数据库中的所有数据一起更新。

所以主要只有两个数据库调用,最初我们获取数据集中的所有数据,然后我们在 Ram 中处理它,而不进行数据库调用。

我们面临的问题是运行一个模型需要将近一个小时才能运行 1 年。我们的基准是在 5 分钟内运行该模型 5 年。

我们已经解决这个问题将近一个月了。现在我们已经能够在 10 分钟内实现 1 年的运行模型。以下是我们发现的事情。 - 从数据集中获取数据时,如果表格包含所有五年的数据,则很难理解,因此我们将数据集划分为每月循环,现在我们一次运行一个月的模型。这给了我们最大的速度提升。 - 尝试减少每天运行的模型内的 for 循环。这并没有给我们带来太大的改进。

您可以从以下链接下载一个 rar 文件。 http://dl.dropbox.com/u/4546390/iPlanner.rar

它包含三个文件。

iPlanner Tables.xls :它给出了数据库设计的想法。 iPlanner Logic.xls :讨论表格和生产模型、出货模型和实际值处理的逻辑。我认为最重要的是看生产模型,这将使​​您对模型每天的工作有一个简要的了解。

Common.cs :它具有调用生产模型功能,一切从这里开始。你也可以去看看。

该模型以前是用 excel 中的 excel 编写的,过去 2 分钟需要 5 年时间。迁移到 .Net 的原因是为了拥有更多的共享功能并拥有类似外观的软件。

我正在尝试找出可以改进的方法。

如果需要更多信息,请告诉我。

提前致谢

【问题讨论】:

    标签: .net performance model analysis


    【解决方案1】:

    如果每个日期的计算都是独立的,这听起来像是 map/reduce 的一个很好的应用。您探索了多少并行化这种计算的想法? 60 个 Hadoop 处理器,在 5 年窗口中每个月一个,可以轻松完成。

    【讨论】:

    • 不幸的是,计算取决于日期,因为它预测的是未来 5 年的库存。所以很难进行任何类型的并行处理。
    【解决方案2】:

    第一:个人资料;p

    接下来我会尝试将DataTable 带出系统,以支持与您的数据完全匹配的强类型类。虽然数据加载速度不是问题,但我会使用 dapper-dot-net 之类的东西来尽可能高效地加载数据。

    使用DataTable每个成员访问都是间接的,并且必须通过内部查找来进行,可能涉及途中的拳击。通过对实际数据属性(几乎总是内联到字段)使用静态绑定来消除所有这些。不幸的是,这有点难以衡量为估计的影响,因为这并非微不足道。

    【讨论】:

    • 数据表或强类型类可能是实现速度的好方法,但我们遇到的问题是我们的大多数表都是动态创建的,因此我们没有固定的结构定义我们在模型时间使用模型。这样我们就无法在这里应用强类型类解决方案。
    • @Kuntal 在规模的另一端,然后......元编程。让系统编写它需要的代码 - 一个很大的改变,还有很多工作。仅供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多