Я просто учусь пускать слюни, поэтому, может быть, я чего-то упускаю, но почему целая партия из пятисот тысяч объектов добавляется в рабочую память одновременно? Единственная причина, по которой я могу придумать, состоит в том, что существуют правила, которые включаются только тогда, когда два или более элемента в пакете связаны между собой.
Если это не так, то, возможно, вы могли бы использовать сеанс без сохранения состояния и устанавливать по одному объекту за раз. Я предполагаю, что в этом случае правила будут работать в 500 тысяч раз быстрее.
Даже если это так, нужны ли всем вашим правилам доступ ко всем объектам 500 КБ? Не могли бы вы ускорить процесс, применяя правила для каждого элемента по одному, а затем на втором этапе обработки применять правила уровня пакета, используя другую базу правил и рабочую память? Это не изменит объем данных, но сеть RETE будет меньше, поскольку простые правила будут удалены.
Альтернативный подход заключается в том, чтобы попытаться идентифицировать связанные группы объектов и распределить объекты по группам на втором этапе, еще больше сократив объем данных в рабочей памяти и разделив сеть RETE.