使用VSTO将数据加载到Microsoft Project中时如何提高性能

Zhe Yang

背景

我们有一个现有的应用程序,可以将数据加载到Microsoft Project中,以便可以由MS Project操作。

原始应用程序是VB6针对MS Project 2003/2007编写的老式COM Project加载项,现在我们计划将其迁移到针对MS Project 2013/2016的VSTO加载项。

问题

对于他们的COM加载项解决方案,我们遇到了性能问题:

测试项目具有4414个活动(av_activity表)和8330个关系(av_reln表)。

在装入操作期间报告了性能问题:

对于以上项目,在MSP 2003模板上的加载时间约为30-35分钟。

MSP 2007和2010模板上的加载时间> 3小时

对于VSTO解决方案,它会变得更好,但我们仍然希望可以通过某种方式提高加载性能。

到目前为止我们尝试过的

我们尝试了几种技巧,但效果不大...

  • 添加数据时进行自动计算

    _application.Calculation = PjCalculation.pjManual;

  • 在添加数据期间禁用屏幕更新

    _application.ScreenUpdating = false;

  • 禁用突出显示更改

    _application.EnableChangeHighlighting = false;

  • 禁用状态栏

    _application.DisplayStatusBar = false;

  • 将“撤消”值设置为1

  • 将默认视图设置为“任务表视图”(而不是“甘特图视图”,这会在加载期间产生更多开销)。

寻求帮助

我正在寻求有关在使用VSTO加载项和C#将数据加载到MS Project中时提高性能的任何解决方案的帮助。

提前致谢!

雷切尔·海廷格(Rachel Hettinger)

是的,使用TaskDependencies.Add方法创建关系非常慢。

这是不幸的,因为这是使用的逻辑方法。唯一的解决方法是提前构建前驱列表获得该列表后,可以通过两种方式创建关系:

  • 添加到现有时间表
  • 通过导入包含先前列表的任务数据来创建新时间表

由于您的数据已经是表格格式,因此使用“项目导入向导”从csv或Excel文件导入数据效果很好。要使用项目导入向导,请选择一个csv或Excel文件从MS Project中打开(文件->打开)。该向导将引导您完成创建导入地图的步骤,您可以将其保存以供以后自动化使用。在导入数据中包括Predecessors列,向导将在几秒钟内为您创建关系。

任务“前置任务”字段包含以逗号分隔的前置任务列表。每个前身采用以下格式:

  • 任务ID
  • 关系类型(FS,FF,SS,SF)
  • 滞后(+/- #d)

FS类型且没有滞后的前任仅显示任务ID。以下是一些前置字段值的示例:

  • 14,126,127
  • 73,92秒
  • 144FS + 3d,145

如何从关系表创建前身字段值

假定一个关系表,其中包含前任和后继的任务ID:

  1. 创建一个具有整数键(后继任务ID)和字符串值(前任)的字典。
  2. 循环浏览关系表,并将后继任务的ID和它的前任添加到字典中;如果已经存在,请更新该值以添加逗号和前身。
  3. 遍历字典,A)更新csv文件中的predecessor列,B)在计划中的后继任务上设置predecessors字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在迭代熊猫数据框时如何提高性能?

如何使用 Jetpack Compose 提高性能(在 @Composable 函数中组装某些东西时)

加载参数时提高性能

如何使用Java ArrayList提高性能

如何使用字典提高性能?

如何使用递归代码提高性能

使用维基百科数据时如何提高性能?网页?

ActiveRecord使用联接来提高性能,但将所有相关记录加载到内存中,包括include

加载样式时提高性能(例如,styles.css)

如何使用document.querySelectorAll()到jQuery中以提高性能?

使用jq处理大文件时提高性能

如何减少数据移动以提高性能

如何使用Numpy构建的集合字典提高性能?

如何使用Android处理功能来提高性能?

如何使用F#习语提高性能

如何使用大型Excel文件提高性能

使用SQLite提高性能

如何在一个查询中通过LINQ Include检索子数据以提高性能?

数据使用Ajax将数据加载到Sencha ComboBox中

加载页面以提高性能的最佳方法

当使用JSON数据填充表格布局时,Android会提高性能

在我的代码中的数据表中foreach DataRow时如何获得高性能?

如何使用Axios从外部文件将数据加载到Vue

使用NaN将CSV数据加载到AWS Redshift中

使用FormArray Angular将数据加载到formGroup中

使用jQuery将Json数据加载到表中

使用FormArray Angular将数据加载到formGroup中

使用Boto将JSON数据从CloudTrail加载到DynamoDB中

使用php将数据infile加载到oracle表中