【问题标题】:What is the capacity of a BluePrism Internal Work Queue?BluePrism 内部工作队列的容量是多少?
【发布时间】:2017-04-04 23:23:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: memory-management automation out-of-memory blueprism rpa


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      1. 仅对阶段日志记录禁用或出错。
      2. 不要在操作阶段记录参数(尤其是使用 excel 文件的阶段)
      3. 运行垃圾收集进程
      4. 看看是否可以避免将excel文件读入BP集合,使用OLEDB查询文件
      5. 看看是否可以增加机器上的 Ram 内存
      6. 如果他们使用的是 32 位版本的应用程序,那么无论您为其提供多少内存,Blue Prism 的上限都会达到 2 GB。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 谢谢,但这并不能完全解决我的问题。我一直在研究一种不同的方法,但队列似乎是更好的方法。我正在尝试调用 Garbage Collect,希望能解决我在运行时遇到的内存问题。感谢您的帮助!
        【解决方案4】:

        如果您使用 Excel 文档或 CSV 文件,您可以使用 OLEDB 对象来连接和查询它,就像它是一个数据库一样。您可以使用 SQL 语法来限制一次返回的行数,并对它们进行分页,直到到达文档的末尾。

        【讨论】:

          【解决方案5】:

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

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

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

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

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

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

          【讨论】:

          • 嗨@Jarrick,感谢您的回答并正确指出该方法的一些问题。虽然,这是一个将近 2 岁的问题。老实说,我刚刚开始我的 RPA 之旅,我已经了解了很多我在这个机器人上做错的事情。我承认实施方法是不恰当的。另一方面,即使它没有回答内存管理问题,但您的回答仍然很有帮助。谢谢。
          • 感谢您的 Ashutosh。没有得到正确回应的主题可能会导致混乱,即使他们已经 2 岁了;-)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-30
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多