WCF nettcp 流量优化
WCF nettcp traffic optimization
如何优化 nettcp 绑定的流量?
一个数据对象在内存中占用 300-1000 字节。我需要转移近 1 000 000 个对象。所以我可以创建超过 1 Gb 的流量。字段名称的长度是否会影响序列化对象的大小(即 xml 序列化程序在 xml 元素中使用名称)?
我希望默认使用二进制序列化程序?
启用 gzip 压缩对 1Gb 大小、总时间打包 + 网络传输 + 解包是否有效?
在这种情况下,创建自定义序列化程序可能是更有效的方法?
默认情况下 net.tcp 绑定将使用 Microsoft 二进制 XML 编码,这取决于您使用的 XML 标签的长度,但只列出一次。因此,如果您在一个 WCF 消息中传递所有 1000000 个对象,那么所有标记将只出现一次。
但更重要的是,WCF 默认使用缓冲模式。这意味着您将在内存中拥有所有对象 (1 Gb),然后 WCF 会将它们序列化为某种东西——让我们假设这是另一个 1 Gb。如果您使用可靠的会话,那么在收到接收方的确认之前,还会有一份消息副本驻留在内存中。
因此,不仅流量很重要,本地内存占用也很重要。
如何优化 nettcp 绑定的流量? 一个数据对象在内存中占用 300-1000 字节。我需要转移近 1 000 000 个对象。所以我可以创建超过 1 Gb 的流量。字段名称的长度是否会影响序列化对象的大小(即 xml 序列化程序在 xml 元素中使用名称)? 我希望默认使用二进制序列化程序? 启用 gzip 压缩对 1Gb 大小、总时间打包 + 网络传输 + 解包是否有效? 在这种情况下,创建自定义序列化程序可能是更有效的方法?
默认情况下 net.tcp 绑定将使用 Microsoft 二进制 XML 编码,这取决于您使用的 XML 标签的长度,但只列出一次。因此,如果您在一个 WCF 消息中传递所有 1000000 个对象,那么所有标记将只出现一次。
但更重要的是,WCF 默认使用缓冲模式。这意味着您将在内存中拥有所有对象 (1 Gb),然后 WCF 会将它们序列化为某种东西——让我们假设这是另一个 1 Gb。如果您使用可靠的会话,那么在收到接收方的确认之前,还会有一份消息副本驻留在内存中。
因此,不仅流量很重要,本地内存占用也很重要。