c# - 与 Windows 服务通信的最快方法

标签 c# .net wcf service

我们正在运行一个需要与另一个进程快速通信的服务。目前我们在缓冲模式下使用 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/

相关文章:

c# - 使用 DrawLine C# 绘制抛物线

c# - 自动排除重复项的Linq查询(单行)

c# - C# 中的实例大小

wcf - 在 PCL 服务引用设置中禁用基于任务的异步操作

C#线程创建问题

c# - 在连接 LINQ 中使用多个条件。我,我和

.net - 是否有使用属性来修改 WCF 操作行为的标准方法?

c# - 如何在(重新托管的)工作流设计器中将工作流与旧版本的事件库一起使用?

c# - 购买的证书和开发证书之间的区别?

.net - 如何在传输级别压缩来自 WCF .NET 的 HTTP 请求?