WCF基本类型vs复杂的类型
-
21-09-2019 - |
题
我设计的WCF服务将返回的一个列表中的对象,是描述一个人在该系统。
记录数是真正的大和有,我有一些特性人的性别。它是更好地创建一个新的枚举(它是一个复合型和消耗更多的带宽)名为性别与两个值(男性和女性)或者使用一个基本类型为这样bool IsMale?
解决方案
很少的一点换bool;这是更大的:
<gender>male</gender> (or an attribute gender="male")
或
<isMale>true</isMale> (or an attribute isMale="true")
不多;-p
记录数是真正的大...
如果带宽成为一个问题, 你控制的两端服务, 然后,而不是改变你的实体,你可以看看一些其他选择:
- 预压缩的数据(例如)gzip,并通过(不)a
byte[]
或Stream
, 注意到使MTOM的服务 - (或)开关程序;proobuf-net有WCF挂钩,并且可以实现重大带宽的改进过默认
DataContractSerialier
(再次:使MTOM)。在测试的基础上罗斯文数据 (这) 它减少736,574字节133,010. 和 减CPU需要对其进行处理(双赢).有关信息,这减少了枚举,整数,通常只需要1个字节的枚举,值和1节确定的领域;对比<gender>Male</gender>
, 在UTF8 21字节(多于大多数其他编码),或gender="male"
在14个字节。
然而,要么改变将打破你的服务如果你有外部的呼叫者都期待着定期的肥皂...
其他提示
到不使用enum
的原因是,XML模式不具有概念等同于enum
。也就是说,它没有指定值的概念。其结果是,枚举并不总是平台之间进行转换。
使用一个布尔,或代替单字符字段。
我建议你模型,可以以任何方式似乎是最自然的,直到你遇到一个具体问题或遇到的变更要求。
WCF被设计成抽象的底层细节,并且如果带宽是一个问题的话,我认为一个bool,int或枚举将所有可能是4个字节。你可以通过使用一个位掩码或使用单字节优化。
再次易用的API和可维护性的可能是更重要的,您选哪一种?
if( user[i].Sex == Sexes.Male )
if( user[i].IsMale == true; ) // Could also expose .IsFemale
if( user[i].Sex == 'M' )
等。当然,你可以暴露多个。
不隶属于 StackOverflow