我们正在运行一个需要与另一个进程快速通信的服务。目前我们在缓冲模式下使用 WCF NetNamedPipeBinding 来调用服务中的方法,这似乎提供了可用 WCF 绑定(bind)的最少开销。使用托管代码是否有更快的方法来执行此操作?
编辑:按照下面的建议捆绑请求是一个已经考虑过的选项。真的,我们想知道是否有用于进程间通信的替代 API,其性能优于使用命名管道的 WCF。
最佳答案
如果您使用的是 WCF,那么命名管道是在本地系统上进行通信的最快方式。
如果您要处理大量数据,那么您可以研究流式传输您的 API(只需添加一个 System.IO.Stream 作为参数,而不是传递数组或字符串等)
对于性能,您的托管模型也非常重要,就服务的实例模式而言。当您通过代码示例进入他书中的内容时,Juval Lowy 关于 WCF 的书实际上非常好。
编辑:为了回应您的评论,请查看您可以应用于服务定义的“ServiceBehaviour”属性。 (不是您的 IServiceInterface 描述,而是您类的具体实现)。
您可以通过 PerCall、PerSession 或 Singleton 将代码定义为实例。默认是 singleton PerSession(感谢@RichardOD),并发模式设置为 single,instanceContextMode 设置为 true,这允许您在 Windows 窗体上托管 WCF,并防止您搬起石头砸自己的脚,如果你不明白实例化。
基本上,如果您将其保留为默认值,您最终会得到一个单线程、顺序处理的 WCF 主机。
MSDN 有一些关于每种类型的用途的合理信息。
关于c# - 与 Windows 服务通信的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/556488/