我正在使用一个带有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>非常感谢!
发布于 2012-03-17 16:41:00
就像评论说的那样,可能不是传输速率导致了问题,而是序列化。
有3件事需要考虑:
内存中对象的序列化和保留的CPU使用率
为了发送250MB,它将首先被序列化,然后被发送,然后被反序列化。这可能会在内存中产生3份数据副本,这可能会导致磁盘崩溃。
几年前我们也遇到过类似的问题,最终切换到直接调用dll,将内存引用传递给列表大约需要1毫秒。
https://stackoverflow.com/questions/9009520
复制相似问题