Joa*_*mer 6 c# performance state-machine workflow-foundation
我正在处理一个系统,我必须跟踪几千个并行对象的状态,每分钟发送几次可能的状态更新.此外,我必须执行额外的计算(没有缓慢的IO东西,只使用CPU).
我目前使用自定义状态机实现.然而,由于WF在系统的其他部分中使用,我想知道WF状态机是否适合具有少数(<5)状态的这种情况.
我担心在性能方面,开销可能太大了.由于MS文档并未真正涵盖有关WF状态机性能的主题,我想知道某些SO成员是否有某些信息或资源来重新获得WF状态机的性能?
关于j.
如果您正在寻找基于.Net的高性能状态机,我建议使用无状态.以下是项目网站的摘录:
支持大多数标准状态机构造:
还提供了一些有用的扩展:
配置如下:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
Run Code Online (Sandbox Code Playgroud)
好的是,由于它实现了Generics,您可以使用int或string来表示状态和触发器,从而可以非常轻松地与数据库或ORM集成.美妙之处在于,您不必担心额外的运行时主机,只需从对象或记录中加载具有当前状态的状态机,您就可以开始使用了.