WCF 提高传输数据性能方法之压缩
在关于 WCF 中数据压缩的几篇文章中大概介绍了针对WCF的压缩,下面对里面提到的两个开发包进行测试。
目前能找针对WCF的压缩扩展主要有两个,一个是MS在TechnologySamples提供的,另外一个是WS-Compression for WCF
测试办法:能力有限,没有办法测试内存对象的大小,采用折衷的办法:通过比较压缩前数据、压缩后数据分别从服务器端传送到客户端的时间来确定大概压缩率。
测试数据情况:单表,20个字段,字段内容大概300个字符,
网络情况:为了测试压缩率所以客户端和服务器在同一台机器上。
机器配置:酷睿双核1.83,2G内存
1万行数据测试情况:
未压缩: 平均11m
WS-Compression(Maximum) 平均8M
WS-Compression(Normal) 平均7M
WS-Compression(Fast) 平均7M
GZipEncoder压缩: 平均4M
另外在WS-Compression开发包占用内存比较大,1万条数据大概350000K,而 GZipEncoder只有130000K。
这两个开发包都是采用了GZip算法,但是两者的压缩效率相差不少。WS-Compression提供了Maximum、Normal、Fast还有NoCompression四种压缩级别,但是从测试来看,前三种差别不大,总体压缩率在64%的样子;而GZipEncoder压缩率在36%的样子。同样采用GZip算法,不知道为何两者差别这么大,详细代码没有看,原因不清楚。
在WCF中使用Gzip压缩的配置方法
这是一种基于WCF通道传输数据的压缩技术,只要通过配置就可以在自己的项目中使用压缩技术,比较方便!
服务端App.config <system.serviceModel> <services> <service behaviorConfiguration="metadataBehavior" name="WcfTest.Services.SwfBuilderService"> <endpoint address="http://127.0.0.1:99/swfbuild" binding="customBinding" bindingConfiguration="BufferedHttpSampleServer" bindingName="BufferedHttpSampleServer" contract="WcfTest.Contracts.ISwfBuilder" /> </service> </services> <extensions> <bindingElementExtensions> <add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </bindingElementExtensions> </extensions> <bindings> <customBinding> <binding name="BufferedHttpSampleServer"> <gzipMessageEncoding innerMessageEncoding="textMessageEncoding" /> <httpTransport hostNameComparisonMode="StrongWildcard" manualAddressing="False" maxReceivedMessageSize="65536" authenticationScheme="Anonymous" bypassProxyOnLocal="False" realm="" useDefaultWebProxy="True" /> </binding> </customBinding> </bindings> <system.serviceModel>
客户端App.config <system.serviceModel> <bindings> <customBinding> <binding name="WSHttpBinding_SwfBuilderService"> <gzipMessageEncoding innerMessageEncoding="textMessageEncoding" /> <httpTransport manualAddressing="false" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" proxyAuthenticationScheme="Anonymous" realm="" useDefaultWebProxy="true" /> </binding> </customBinding> </bindings> </system.serviceModel> <extensions> <bindingElementExtensions> <add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </bindingElementExtensions> </extensions> <client> <endpoint address="http://127.0.0.1:99/swfbuild" binding="customBinding" bindingConfiguration="WSHttpBinding_SwfBuilderService" contract="SwfBuild.SwfBuilderService" name="WSHttpBinding_SwfBuilderService"> </endpoint> <metadata> <policyImporters> <extension type="GZipEncoder.GZipMessageEncodingBindingElementImporter, GZipEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </policyImporters> </metadata> </client>
下载压缩类:GZipEncoder.rar

浙公网安备 33010602011771号