我们正在运行一项需要与其他流程快速通信的服务。目前,我们在缓冲模式下使用WCF NetNamedPipeBinding来调用服务中的方法,这似乎提供了可用WCF绑定的最小开销。使用托管代码有更快的方法吗?
编辑:以下建议的聚合请求是已考虑的选项。实际上,我们想知道是否存在使用命名管道优于WCF的进程间通信的替代API。
答案 0 :(得分:8)
如果您正在使用WCF,那么命名管道是在本地系统上进行通信的最快方式。
如果您要丢弃大量数据,那么您可以查看流式传输API(只需添加System.IO.Stream作为参数,而不是传递数组或字符串等)。
同样,对于性能,您的托管模型也非常重要,就您的服务实例模式而言。当你通过代码示例进入他的书的时候,Juval Lowy的关于WCF的书实际上非常好。
编辑:在回复您的评论时,请查看可应用于服务定义的“ServiceBehaviour”属性。 (不是你的IServiceInterface描述,而是你的类的具体实现)。
您可以通过PerCall,PerSession或Singleton将代码定义为实例。默认为 singleton PerSession(感谢@RichardOD),并发模式设置为single,instanceContextMode设置为true,这允许您在Windows窗体上托管WCF并阻止您在脚下拍摄自己不了解实例。
基本上,如果将其保留为默认值,最终会得到一个单线程,顺序处理的WCF主机。
MSDN有一些关于每种类型的合理信息。
答案 1 :(得分:3)
那么,你是音量限制(即大信息)还是往返限制(许多小信息)?
对于大消息,请考虑压缩(如果网络IO是开销)或更有效的序列化,例如protobuf-net。
对于健谈的API,请考虑聚合消息以减少往返次数。