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

2024-04-02

背景

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

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

Problem

对于他们的COM Add-in解决方案,我们遇到了性能问题:

测试项目有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 时提高性能的任何解决方案的帮助。

提前致谢!


是的,使用任务依赖项.添加 https://msdn.microsoft.com/en-us/library/office/ff862292.aspx创建关系的方法极其缓慢。

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

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

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

任务前辈领域 https://support.office.com/en-us/article/Predecessors-task-field-5a5ea9c2-14e6-4be7-9a3d-d8b6cba10cab包含以逗号分隔的前趋列表。每个前任的格式如下:

  • Task ID
  • 关系类型(FS、FF、SS、SF)
  • 滞后 (+/- #d)

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

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

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

假设一个关系表包含前驱和后继的任务 ID:

  1. 创建一个包含整数键(后继任务 ID)和字符串值(前置任务)的字典。
  2. 循环关系表,将后继任务ID及其前驱任务添加到字典中;如果已存在,则更新该值以附加逗号和前导。
  3. 循环字典并 A) 更新 csv 文件中的前导列orB) 在计划中的后继任务上设置前置字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VSTO 将数据加载到 Microsoft Project 时如何提高性能 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy

随机推荐

  • 在绘图中向堆积条形图添加计数百分比

    Given the following chart created in plotly 我想添加每个块内 M 和 F 类别的每个计数的百分比值 用于生成该图的代码 arr np array Dog M Dog M Dog F Dog F C
  • 计算查询中活动时间戳之间的时间差

    我对 Access 相当陌生 无法解决 我希望 一个简单的问题 我想我可能是通过 Excel 护目镜来查看它 我有一个名为importedData我每天 并不奇怪 导入一个日志文件 该日志文件来自某些采矿设备上的简单数据记录应用程序 本质上
  • 为什么我无法将工作簿定义为对象?

    为什么我不能用这两种方式定义工作簿 我在那里有范围位只是为了快速测试 我该如何修复它 这会产生一个 Compile Error Type Mismatch Sub Setwbk Dim wbk As Workbook Set wbk F Q
  • 将查询数据保存为 csv 文件

    我有一个应用程序 可以打开 csv 文件并将所有内容显示到格式化的 datagridview 中 从那里我有一个按钮可以打开另一个包含一系列复选框的表单 复选框具有我们之前打开的csv文件的所有属性 用户应该能够根据他们想要的属性查询文件
  • 卸载 Visual Studio 2013 update 1 rc

    害怕听起来像个菜鸟 我在卸载 Visual Studio 2013 update 1 时遇到问题 我怎么做 转到 控制面板 gt 程序 gt 程序和功能 gt 左侧栏上的 查看已安装的更新 然后向下滚动到 Microsoft Visual
  • 某些表的动态数据库备份

    我只需要备份主数据库中的一些表 其他表是参考表并且是静态的 因此不需要备份 我在 SD 卡上创建了一个新的空白数据库 我可以直接访问SD卡上的数据库还是需要在备份完成后复制它 真正的问题是我是否可以循环遍历每个记录中的字段或其他内容 这样我
  • 如何使用boost多精度生成正态随机数?

    我正在尝试使用 boost 的多精度从正态分布生成随机数 我可以从均匀分布生成随机数 但是当我尝试从标准正态分布生成随机数时 它报告错误 这是代码 以下来自来自 boost 的示例 http www boost org doc libs 1
  • Django 使用整数字段作为外键字段

    为了支持旧的 遗留 数据库 我们必须创建一个使用的表整数字段 as a 外键 to User表 这就是我们的模型的样子 class UserHistory user id models IntegerField null True blan
  • FusedLocationProviderClient requestLocationUpdates 不会触发上述 API 23 的 LocationCallBack

    我已经用尽了所有可能的方法来解决这个问题 在对我的应用程序进行调整之前 从技术上讲 我使用的是在 API 23 及更高版本中运行的相同代码 回调 在请求位置更新中 不在手机中触发 棉花糖及以上 但它在模拟器中运行良好 使用 Pixel 2
  • 有按钮栏的视图吗? (描述视图的图像链接)

    我正在寻找有关 Android 默认应用程序中底部栏的视图或某种信息 例如电子邮件或解锁图案 如下图所示 我在 Android 网站或 Google 搜索中找不到任何有关此内容的信息 Image http img11 imageshack
  • 使用Python编写Parquet文件的方法?

    我无法找到允许使用 Python 编写 Parquet 文件的库 如果我可以结合使用 Snappy 或类似的压缩机制 那就加分了 到目前为止 我发现的唯一方法是将 Spark 与pyspark sql DataFrame镶木地板支持 我有一
  • MVC 操作被调用两次

    我有一个MVC Action Method如果请求需要时间才能完成 则会被点击两次 在检查 chrome 控制台网络日志和 fiddler 时 该请求仅从 JS 发送一次 在下图中 我面临这个问题Approach 1 但是 如果我这样做的话
  • Django“DecimalFields 必须定义“decimal_places”属性。”

    我的模型字段之一如下 aaf 1kg all models DecimalField blank True null True 当我正常使用我的模型时 一切都很好 当我在一个ready hook https docs djangoproje
  • java中的虚方法调用是什么?

    我在一些计算机科学测试中看到了下一段 我希望我能在这里得到它的含义的一个很好的解释 因为我用谷歌搜索了一个小时 但找不到任何东西 当我们说 Java 语言有虚方法调用我们的意思是 在java应用程序中 执行的方法是由运行时的对象类型决定的
  • 获取console.log()显示自定义对象描述

    我有一个自定义的 JS 对象来表示网格 对于这个例子来说 它看起来像这样 function Grid c r var layout var contentPointer 0 this getCell function c r Return
  • 在 TVML 应用程序中更改 XMLHttpRequest 的用户代理

    我正在使用 TVMLKit 开发 Apple TV 应用程序 我的应用程序的 JavaScript 代码尝试使用以下命令向服务器发送 HTTP 请求XMLHttpRequest 服务器需要特定的用户代理 所以我尝试了以下方法 var req
  • Android 视频视图中缓冲区达到 20% 后如何开始(播放)视频

    我有一个视频视图 可以使用来自服务器的 url 来播放视频 我希望在缓冲达到 20 时播放视频 所以我已经将 setOnBufferingUpdateListener 的侦听器添加到媒体播放器中 如下所示 Uri video Uri par
  • 如何为 php 安装 hiphop?

    大多数开发人员都了解 Facebook 的 Hiphop for php 我想在我的脚本中使用它 但不知道从哪里开始 我应该与我的服务器提供商联系吗 或者我需要在脚本中添加一些代码吗 HipHop 很难安装 但幸运的是我刚刚经历过它 您需要
  • 相当于 Python 中 Julia 中的“with”?

    Julia 有与 Python 相当的东西吗 with 也许作为一个宏 这非常有用 例如 自动关闭打开的文件 Use a do堵塞 关于 do 块的文档是here https en wikibooks org wiki Introducin
  • 使用 VSTO 将数据加载到 Microsoft Project 时如何提高性能

    背景 我们有一个现有的应用程序 可以将数据加载到 Microsoft Project 中 以便可以由 MS Project 进行操作 原始应用程序是由 VB6 编写的旧式 COM 项目加载项 针对 MS Project 2003 2007