我有一些服务器端数据,我需要从服务器应用程序复制(实时推送)到大约100个wpf客户端。我的问题是当一个给定的Order对象发生变化时,它通常只会更改1或2个字段,因此我只想通过线路发送这些更改而不是整个对象 - 从而减少了线路有效负载,处理时间等整个Order对象所具有的50个领域。
数据是OrderId上键入的Order对象字典。我使用protobuf-net来截取数据并通过网络发送给wpf客户端。
之前有没有人处理过这个问题?或者对于实现这一目标有什么想法?
非常感谢。
答案 0 :(得分:0)
protobuf-net支持许多模式来帮助这种类型的场景,最简单的是(共享System.ComponentModel使用的模式):
[ProtoMember(1)]
public string Foo { get;set; }
public bool ShouldSerializeFoo() { /* return true if Foo is "dirty" */ }
这假设您有一些机制可以自己跟踪 (用于挂钩ShouldSerialize*
方法); protobuf-net不会自行更改跟踪。如果您目前没有任何更改跟踪,则可以使用此答案中的内容:Comparing 2 objects and retrieve a list of fields with different values
答案 1 :(得分:0)
使用Castle.DynamicProxy创建一个简单的代理,它保存已更改的所有属性的名称。