我已经得到最大的吞吐量表现在我WCF服务。在我的一个测试的服务下面只有50公里数据的项目每分钟使用NetTcpBinding.会断开结合喜欢NetMsmqBinding改善这个的性能吗?

服务和客户使用WCF和运行在相同的机。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Storage : IStorage
{
    protected List<int> _data = new List<int>();

    public void Insert(int[] data)
    {
        lock (_data)
        {
            _data.AddRange(data);
        }
    }

    public int[] Get()
    {
        lock (_data)
        {
            return _data.ToArray();
        }
    }
}

上述代码是一个简化版本的实际代码。

有帮助吗?

解决方案

MSMQ是可能比TcpBinding慢。

如果你在同一台机器上运行,你一定要使用NetNamedPipeBinding(IPC),这是最快的结合使用。

您也应该检查你如何序列化数据。协议缓冲序列化是一种很多比默认WCF二进制序列更快(稀)(但需要的调整的一点点)。

其他提示

快一个呼叫中的隔离,或对于洪水的成千上万的电话?

NetMsmq使用内容的消息,排队-你也把你的消息成队列中处理内容,并且该服务将得到它从该队列最终和它的工作。你没有得到即时的反馈,消息的一种方式只。

NetTcp另一方面是喜欢http只是速度更快。你发送请求的服务和回应(如果一切顺利的话)。没有消息排队本身参与,你的消息请求/回复。

所以我不认为你可以比较这两种绑定的,真的。他们所服务的完全不同的目的:

  • 如果你想要,例如看看一个邮政编码,并得到回纬度/经度的位置,你肯定想要一个请求/应答机制-->使用netTcp

  • 如果你想的存款要求,例如打印的文件,或重组的一个数据库,或一些自然的东西,需要将往往是最终的,但是你别指望回响应马上(但是你以后可以检查,如果消息已经适当地处理),那么使用排队系统的消息

希望让事情变得有点更加清楚-我不认为这两个真的是针对一组相同的操作,所以你最有可能永远不会有选择之间的那两个直接:)

如果在同一机器上运行的服务和客户端I将完全避免网络赞成IPC机制的诸如命名管道。网络流量会带来很大的开销,可以通过使用IPC机制来避免。

你有理由相信,这种迁移是什么减慢交易速度?什么分析告诉你的?现在这个服务被设定为单线程的,并且还具有多个调用“获取”锁定彼此进行。

如何被调用/使用该服务?它是否有助于使多线程?有关使用更复杂的锁像ReaderWriterLock允许多个调用来获得在同一时间发生,但仍阻挡“添加”是什么?

编辑:我知道这是一个简化的情况,但将从相同的考虑实际的服务benifit

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top