Какова емкость внутренней рабочей очереди BluePrism?

Я работаю в BluePrism Robotics Process Automation и пытаюсь загрузить лист Excel с более чем 100 тыс. Записей (в некоторых случаях он может превышать 300 тыс.). Я пытаюсь загрузить внутреннюю рабочую очередь BluePrism, но получаю сообщение об ошибке, указанное ниже:

«Загрузить данные в очередь» ОШИБКА: внутренняя: возникло исключение типа «System.OutOfMemoryException».

Есть ли способ избежать этой проблемы, если я могу освободить больше памяти? Я планирую обрабатывать записи одну за другой из очереди и категорически помещать их в новые таблицы Excel. Загрузка всех этих данных в коллекцию и их перебор может потребовать много памяти, поэтому я пытаюсь найти более эффективный способ.

Я приветствую любую помощь / советы. Спасибо!


person codenameGamer    schedule 21.11.2016    source источник


Ответы (5)


Это обычная проблема для RPA, особенно при работе с большими файлами Excel. Насколько мне известно, 100% решений не существует, а есть только методы, уменьшающие симптомы. Я сталкивался с этой проблемой несколько раз, и вот способы, которыми я бы попытался с ними справиться:

  1. Отключить или Ошибки только для сценического ведения журнала.
  2. Не записывать параметры на этапах действия (особенно те, которые работают с файлами Excel)
  3. Запустить процесс сборки мусора
  4. Посмотрите, можно ли избежать чтения файлов Excel в коллекции BP и использовать OLEDB для запроса файла
  5. Посмотрите, можно ли увеличить оперативную память на машинах
  6. Если они используют 32-разрядную версию приложения, то не имеет значения, сколько памяти вы ему заполнили, Blue Prism ограничится 2 ГБ.
person PGOEL    schedule 05.07.2019

Базовое решение. Разбейте количество строк Excel, которые вы вставляете в элемент данных коллекции одновременно. Пороговые значения для этого будут зависеть от памяти и архитектуры вашей системы ресурсов, а также от структуры и размера данных в таблице Excel. Мне удалось быстро переместить 50 тыс. Строк с 10 столбцами из Excel в коллекцию, а затем очень быстро в очередь Blue Prism.

Вы можете настроить это, указав диапазон листа Excel для извлечения в элемент данных коллекции, а затем сдвигать этот диапазон каждый раз, когда коллекция была успешно добавлена ​​в очередь.

После каждого успешного добавления в очередь и / или перед перемещением диапазона и / или при заранее заданном пределе количества вы можете запустить действие «Очистить» или «Сбор мусора», чтобы освободить память.

Все это можно сделать с помощью предоставленного Excel VBO и дополнительного объекта очистки.

Имейте в виду: даже разбиение на цикл, перебор такой большой Коллекции для исправления данных будет чрезвычайно дорогостоящим и медленным. Самый эффективный способ внести изменения в данные - на уровне книги Excel или когда они уже находятся в очереди Blue Prism.

Лучший вариант: альтернативное решение esqew является наиболее элегантным и, вероятно, лучшим выбором.

Джаррик ударил его по носу: элементы рабочей очереди должны предоставить боту информацию о том, над чем они должны работать, и пространство обратной связи Control Room, но не фактические рабочие данные, которые будут реализованы / обработаны.

В этом случае вы могли бы просто использовать номер строки рабочего листа элементов и / или какой-либо уникальный идентификатор из одного столбца рабочего листа в качестве данных элемента очереди, чтобы бот мог предоставить обратную связь диспетчерской о статусе элемента. Если эта информация достаточно предсказуема по формату, не должно быть необходимости перемещать какие-либо данные из листа Excel в коллекцию, а затем в рабочую очередь, а просто создавать очередь на основе этой предсказуемости данных.

И наоборот, вы также можете заставить бота строить очередь «как это происходит», так как после того, как он захватит данные одной строки из листа Excel для работы, он также может добавить элемент очереди с номером строки данных. Затем это включит обратную связь и отслеживание в диспетчерской. Однако это почти в каждом случае было бы плохой практикой, поскольку это не помешало бы строке работать несколько раз, если бот сначала не проверил очередь, и в этот момент вы отменили прирост скорости, которого вы хотели достичь в вырезание первоначального здания очереди в первую очередь. Также было бы невозможно масштабировать процесс для нескольких ботов для эффективной работы с данными Excel Worksheet.

person Alex P    schedule 10.06.2018

Это может быть из-за сервера BP, поскольку память распределяется между процессами и рабочей очередью. Лучше использовать двух ботов и несколько очередей, чтобы избежать ошибки памяти.

person Shantanu    schedule 13.12.2016
comment
Спасибо, но это не решает полностью мою проблему. Я работал над другим подходом, но очереди, кажется, лучше. Я пытаюсь вызвать сборщик мусора, надеясь исправить проблемы с памятью, возникающие во время выполнения. Спасибо за помощь! - person codenameGamer; 28.04.2017

Если вы используете документы Excel или файлы CSV, вы можете использовать объект OLEDB для подключения и запроса к нему, как если бы это была база данных. Вы можете использовать синтаксис SQL, чтобы ограничить количество строк, которые возвращаются за раз, и разбивать их на страницы, пока не дойдете до конца документа.

person esqew    schedule 24.01.2018

Во-первых, вы неправильно используете рабочую очередь в Blue Prism. Рабочая очередь не должна использоваться для хранения этого типа и объема данных. (внимательно прочтите документацию BP по рабочим очередям).

Для решения проблемы, связанной с неправильным использованием, необходимо внести 2 изменения:

  1. Сохраняйте в данных элемента только ссылки, которые указывают на файл Excel, содержащий данные.

  2. Если вы много раз обращаетесь к такому количеству данных, возможно, конвертируете файл в CSV, напишите VBO, который запрашивает данные непосредственно в CSV.

Первое изменение - это не просто рекомендация, но по мере того, как ваш проект будет развиваться, и ИТ-архитектура и InfoSec войдут в игру, оно станет обязательным.

Что касается CSV VBO, взгляните на C #, он сделает вашу жизнь намного проще, чем загрузка всех этих данных в BP (отнимает много времени, ненадежно, ...).

person Jarrick    schedule 08.06.2018
comment
Привет @Jarrick, Спасибо за ваш ответ и правильное указание на некоторые недостатки подхода. Хотя, это вопрос почти двухлетней давности. Честно говоря, я только начинал свой путь в RPA и узнал много вещей, которые я делал с этим роботом не так. Я признаю неправильный подход к реализации. С другой стороны, даже если он не отвечает на вопрос об управлении памятью, ваш ответ тем не менее полезен. Спасибо. - person codenameGamer; 09.06.2018
comment
Спасибо за это, Ашутош. Темы, на которые не ответили должным образом, могут ввести в заблуждение, даже если им 2 года ;-) - person Jarrick; 26.06.2018