Мы используем Drools 6.4.0.Final (но попробовали 7.12.0.Final с теми же результатами) в качестве нашего механизма правил и заметили довольно существенную разницу во времени ответа при первом вызове KieSession.execute по сравнению с любым последующие исполнения, т.е. 200-300 мс против <1 мс после. </p>
Мы загружаем все наши правила при запуске, создавая и загружая базы знаний один раз заранее и создавая сеанс без сохранения состояния для каждого вызова правила. Как предложено здесь , я добавил вызов kc.newStatelessKieSession () и kc.getKieBase () как часть запуска правила с незначительным улучшением в результате. Единственное решение, которое я нашел до сих пор, - это выполнить правила хотя бы один раз при запуске с фиктивным вводом, чтобы все фактические исполнения всегда были быстрыми.
Я посмотрел тест производительности в примерах drools и увидел, что здесь они вызывают правила один раз, прежде чем синхронизировать фактические последующие правила. Является ли этот стандарт / чтобы избежать этой начальной нагрузки искажать результаты производительности?
Есть ли лучший способ, чтобы я мог избежать этой начальной задержки, заставляя правила инициализироваться при запуске, а не делать это как часть первого вызова?