4

netNamedPipeBinding で WCF サービスを使用して、大量のデータ (オブジェクトの非常に長いリスト) をクライアント (もちろん同じマシン上にあります) に転送しています。問題は、呼び出し全体で約 250 MB のデータを転送するのに約 20 秒かかることです。これは 1 秒あたり約 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を直接呼び出すように切り替え、メモリ参照をリストに渡すには約1時間かかりました。1ミリ秒。

于 2012-03-17T08:40:59.740 に答える