2016-07-12 19 views
1

私は1つの物理オブジェクト(IoTデバイス)を表すいくつかのアクターを持っています。サービスファブリックアクターはどのように関連付ける必要がありますか?

私たちのコードベースを見てみると、既存のActorReferenceを他のアクターに渡すことがあります。また、新しいプロキシオブジェクトを作成するときもあります。

私は既存のActor Referenceを渡す方がパフォーマンスは良いと思っていましたが、私は副作用が心配しているので、新しいプロキシオブジェクトを作成することはリスクが低いようです。

各アプローチのプロおよびコンセプトは何ですか、どのアプローチを使用するかを決める際に考慮すべき点は何ですか?

+0

@MaGuと同意します - 両方の方法でプロキシオブジェクトを作成する必要があるため、違いはありません。唯一の問題はシリアライゼーションですアクターIDだけを渡すと、ActorReferenceよりも効率的になります。 – cassandrad

答えて

2

逆コンパイルソースコードを研究から、ActorReference.Bindを使用して私には思えるとActorProxy.Createはほぼ同じである:

public object Bind(Type actorInterfaceType) 
{ 
    return ActorProxy.DefaultProxyFactory.CreateActorProxy(actorInterfaceType, this.ServiceUri, this.ActorId, this.ListenerName); 
} 

public static TActorInterface Create<TActorInterface>(ActorId actorId, string applicationName = null, string serviceName = null, string listenerName = null) where TActorInterface : IActor 
{ 
    return ActorProxy.DefaultProxyFactory.CreateActorProxy<TActorInterface>(actorId, applicationName, serviceName, listenerName); 
} 

ので、信頼性もパフォーマンスのどちらも差がありません。

ActorReferenceは、直列化をサポートしているため、アクター間をやりとりするのに適しています。

0

受理側でActorProxyをカスタムActorProxyFactoryで作成できるように、ActorReferenceを渡す方が優れています。アクターがインターフェースとして渡された場合、非直列化プロセスは、デフォルトのアクター・プロキシー・ファクトリーを使用して、参照をプロキシーにバインドし、プロキシー・オブジェクトを受信メソッドに提供します。

関連する問題