当前位置 : 主页 > 网络安全 > 测试自动化 >

WCF与netNamedPipeBinding性能不佳

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在使用带有netNamedPipeBinding的WCF服务将大量数据(很长的对象列表)传输到客户端(当然是在同一台机器上). 问题是整个调用大约需要20秒来传输~250MB的数据,大约是每秒10 MB.我希望在共享
我正在使用带有netNamedPipeBinding的WCF服务将大量数据(很长的对象列表)传输到客户端(当然是在同一台机器上).
问题是整个调用大约需要20秒来传输~250MB的数据,大约是每秒10 MB.我希望在共享内存时传输速率要快得多.有谁知道如何提高我的表现和转移率?
这是我的app.config文件:

<netNamedPipeBinding>
    <binding name="NetNamedPipeBinding_IDataService" closeTimeout="00:10:00"
      openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
      transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
      hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647"
      maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
        maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
      <security mode="Transport">
        <transport protectionLevel="None" />
      </security>
    </binding>
  </netNamedPipeBinding>

非常感谢!

就像评论所说,可能不是导致问题的传输速率,更多的是序列化.

有三件事需要考虑:

>序列化和反序列化的CPU使用率
>将对象保存在内存中
>转移率

要通过它发送250 MB,首先将序列化,然后发送,然后反序列化.这可能导致内存中的3个数据副本,这可能导致磁盘抖动.

几年前我们遇到了类似的问题,并最终切换到直接调用dll,将内存引用传递给列表需要大约. 1毫秒.

网友评论