Я пытаюсь написать приложение C#, которое принимает сотни тысяч независимых строк данных и на основе определенных правил, определенных пользователем, устанавливает определенное свойство. Поэтому я думал об использовании механизма правил. После некоторого поиска в Google я решил использовать встроенный Windows Workflow Foundation Rules Engine.Может ли обработчик правил рабочего процесса Windows обрабатывать ветвление?
Интерфейс для создания правил представляется пользователю в трубы и фильтра стиле:
Исходные данные -> rule1 -> если результат к правилу 1 истинно, выполнить Правила2 /, если результат к правилу 1 является False, выполнить правило 3 -> ... ветви выполнения других правил ... -> в зависимости от принятых ветвей, свойство задано некоторым значением.
Я хочу иметь возможность выполнять правила в аналогичном канале и стиле фильтра/ветвления, а не последовательно, как это делает набор правил без цепочки. Я не уверен, как создать зависимости для набора правил цепочки в соответствии с моим потоком. Я понимаю, что WF имеет IfElse Activities специально для этого типа ветвления, которые поддерживают аналогичные правила, но Workflow Activities на два порядка медленнее.
Я использую эти технологии неправильно? (Я новичок в C#) Должен ли я задуматься о написании собственного механизма правил? Любые советы приветствуются.
Редактировать: Дополнительная информация о проведенных исследованиях. Я googled вокруг и читаю большинство сообщений в блогах/учебников/ресурсов msdn, которые я мог найти на прошлой неделе (без использования ссылок, есть тонны, и я использовал очевидные ключевые слова). Набор правил двигателя правил, по-видимому, используется исключительно для последовательных независимых правил, и когда они зависят, они сигнализируют об этом факте, изменяя некоторую переменную, которая является зависимостью в самом правиле, и заставляет эти правила переоценивать (что-то похожее на Я считаю, что RETE называется полной цепью). Я не вижу способ динамического вложения зависимостей в мои правила на основе их структуры и отношений. Однако я могу моделировать этот поток управления с помощью IfElse Activities.
Я реализовал небольшой набор правил с 700 строками данных образца и провел несколько тестов. (не использовать для вставки кода, у меня нет проблемы с этим). Они оценивают в ~ 50 мс, а эквивалентная логика, построенная с помощью операций IfElse и тех же правил, оценивается в aprox. 2 секунды, что я предполагаю, это из-за превышения активности переключения. Я либо не правильно использую эти технологии (я имею в виду, что я не знаю о том, что свойство наборов правил, которые нужно оценивать в гиперссылках в исключительных ветвях или более быстрых переключениях), или нет простого способа контролировать поток выполнения только с помощью поэтому я должен понести большой штраф за выполнение действий. В этом случае я мог бы написать свой собственный механизм правил.
Edit 2: A diagram of the flow of execution I need from the ruleset
Покажите нам какое-то усилие, которое вы внесли в исследование, добавьте больше деталей, чтобы улучшить ваше изменение, чтобы получить хороший/лучший ответ. –
. Я добавил более подробно к моему вопросу, пожалуйста, сообщите мне, есть ли другие вещи, которые я мог бы не делать обсудили. –