4

我正在使用带有 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>

非常感谢!

4

1 回答 1

1

就像评论说的那样,可能不是导致问题的传输速率,而是序列化。

有 3 件事需要考虑:

  • 序列化和反序列化的 CPU 使用率
  • 将对象保存在内存中
  • 传输率

要发送 250 MB 的数据,首先要对其进行序列化,然后发送过来,然后再进行反序列化。这可能会导致内存中有 3 个数据副本,这可能会导致磁盘抖动。

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

于 2012-03-17T08:40:59.740 回答