英文原文:http://www.codeproject.com/Articles/45298/Array-instead-of-List-in-WCF
最近我正在开发一个在消息报文中传输image的函数,因此习惯性地在消息类中建立了一个类似这样的属性:public List<byte> Image { get; set; }
Image数据通过duplex channel传到客户端,你能想象我是多么惊讶地看到服务进程的CPU消耗吗?约400K的Image CPU达到了15-20%。我必须考虑一个更好的方案了。以下是WCF中duplex channel的结构:
搜索这个问题的解决方案花了我相当数量的时间,然后以字节数组(array of bytes)替换List<byte>得到了更好的结果:CPU基本1-2%。为什么几乎相同类型的数据结果存在这么大的差异?
不同点在于SOAP消息如何生成:
对于List<byte>:
对于字节数组:
通常,两种不同的SOAP消息大小大约相差10倍,消息报文大小相同的情况下CPU消耗能够从15-20%降到1-3%。我很惊讶,因为关于这个差异我没有找到任何官方资料。