我正在使用带有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>
非常感谢!
答案 0 :(得分:1)
就像评论所说的那样,传输速率可能不是造成问题的原因,更多的是序列化。
有三件事需要考虑:
要通过它发送250 MB,首先将序列化,然后发送,然后反序列化。这可能会导致内存中有3个数据副本,这可能会导致磁盘抖动。
几年前我们遇到了类似的问题,并最终切换到直接调用dll,将内存引用传递给列表需要大约。 1毫秒。