1

我在 BluePrism Robotics Process Automation 工作,并尝试加载超过 10 万条记录的 excel 表(在某些情况下可能超过 30 万条)。我正在尝试加载 BluePrism 的内部工作队列,但出现如下引用的错误:

“将数据加载到队列中”错误:内部:引发了“System.OutOfMemoryException”类型的异常。

有没有办法避免这个问题,我可以释放更多的内存?我计划从队列中逐一处理记录,并将它们分类放入新的 Excel 表中。将所有数据加载到集合中并对其进行循环可能会消耗内存,因此我试图找到一种更有效的方法。

我欢迎任何和所有帮助/提示。谢谢!

4

5 回答 5

3

基本解决方案: 在任何时候分解您拉入集合数据项的 Excel 行数。此阈值取决于您的资源系统内存和体系结构,以及 Excel 工作表中数据的结构和大小。我已经能够快速将 50k 10 列行从 Excel 移动到集合,然后非常快速地进入 Blue Prism 队列。

您可以通过指定 Excel 工作表范围以拉入集合数据项来进行设置,然后在每次将集合成功添加到队列时移动该范围。

在每次成功添加到队列之后和/或在移动范围之前和/或在预定义的计数限制处,您可以运行清理或垃圾收集操作以释放内存。

您可以使用提供的 Excel VBO 和附加的清理对象来完成所有这些操作。

请记住: 即使将其分解,循环遍历这么大的集合来修改数据也将非常昂贵且缓慢。更改数据的最有效方法是在 Excel 工作簿级别或当它已经在 Blue Prism 队列中时。

最佳选择: esqew的替代解决方案是最优雅的,可能是您最好的选择。

Jarrick 直截了当地指出,Work Queue 项目应该为机器人提供有关它们要处理的内容和控制室反馈空间的信息,而不是要实施/操作的实际工作数据。

在这种情况下,您可能只想使用项目工作表行号和/或单个工作表列中的某些唯一标识符作为队列项目数据,以便机器人可以提供有关项目状态的控制室反馈。如果此信息在格式上足够可预测,则无需将任何数据从 Excel 工作表移至集合,然后移至工作队列,而只需根据该数据可预测性构建队列。

相反,您也可以让机器人“在发生时”构建队列,因为一旦它从 Excel 工作表中获取单行数据来处理它,也可以添加一个带有数据行号的队列项。这将启用控制室反馈和跟踪。但是,在几乎所有情况下,这都是一种不好的做法,因为它不会阻止一行被多次处理,除非机器人首先检查队列,此时您已经否定了您希望在首先切断最初的队列建设。也无法扩展多个机器人有效处理 Excel 工作表数据的过程。

于 2018-06-10T19:38:36.563 回答
0

If you're using Excel documents or CSV files, you can use the OLEDB object to connect and query against it as if it were a database. You can use the SQL syntax to limit the amount of rows that are returned at a time and paginate through them until you've reached the end of the document.

于 2018-01-24T20:05:41.270 回答
0

首先,您在 Blue Prism 中错误地使用了工作队列。工作队列不应该用于存储这种类型和数量的数据。(请仔细阅读关于工作队列的 BP 文档)。

解决手头的问题,误用需要 2 个更改:

  1. 仅在您的项目数据中存储指向包含数据的 Excel 文件的引用。

  2. 如果您多次查询这么多数据,也许将文件转换为 CSV,编写一个 VBO 直接在 CSV 中查询数据。

第一个更改不仅是建议,而且随着您的项目进展以及 IT 架构和信息安全开始发挥作用,这将是强制性的。

至于 CSV VBO,看看 C#,它会让你的生活比将所有这些数据加载到 BP 中容易得多(耗时、不可靠……)。

于 2018-06-08T09:00:04.880 回答
0

这是 RPA 的常见问题,尤其是在处理大型 Excel 文件时。据我所知,没有100%的解决方案,只有方法可以减轻症状。我已经多次遇到这个问题,这些是我尝试处理它们的方法:

  1. 仅对阶段日志记录禁用或错误。
  2. 不要在动作阶段记录参数(尤其是那些使用 excel 文件的)
  3. 运行垃圾收集过程
  4. 看看是否可以避免将excel文件读入BP集合并使用OLEDB查询文件
  5. 看看是否可以增加机器上的 Ram 内存
  6. 如果他们使用的是 32 位版本的应用程序,那么你提供多少内存并不重要,Blue Prism 的上限为 2 GB。
于 2019-07-05T08:36:18.077 回答
0

这可能是因为 BP 服务器的内存在进程和工作队列之间共享。更好的选择是使用两个机器人和多个队列来避免内存错误。

于 2016-12-13T10:16:41.067 回答