C# 多客户端对象同步算法

C# 多客户端对象同步算法,c#,algorithm,synchronization,p2p,C#,Algorithm,Synchronization,P2p,我正在制作一个小的点对点应用程序,它包含一个共同的对象集合。这不是一个关于套接字通信传输对象的问题,因为我已经进行了排序 首先,我不必担心冲突,因为客户端只能添加到对象集合中。但我在脑子里苦苦思索,克伦特夫妇如何协商他们需要相互转移的对象 我猜这已经做了很多次了,肯定有某种同步算法在那里某处 有什么想法吗 更新: 我想我想问的是,是否有一种方法可以同步,而不必循环遍历每个对等对象上的所有对象,并检查它们是否存在于另一端为每个对象分配一个guid,并且在合并它们时,将它们区分开来不会有问题。还是我

我正在制作一个小的点对点应用程序,它包含一个共同的对象集合。这不是一个关于套接字通信传输对象的问题,因为我已经进行了排序

首先,我不必担心冲突,因为客户端只能添加到对象集合中。但我在脑子里苦苦思索,克伦特夫妇如何协商他们需要相互转移的对象

我猜这已经做了很多次了,肯定有某种同步算法在那里某处

有什么想法吗

更新:


我想我想问的是,是否有一种方法可以同步,而不必循环遍历每个对等对象上的所有对象,并检查它们是否存在于另一端

为每个对象分配一个guid,并且在合并它们时,将它们区分开来不会有问题。还是我误解了你的问题?

为每个对象指定一个guid,当你合并它们时,你不会有问题区分它们。或者我误解了您的问题?

如果您使用可串行化对象的
可观察集合
实现
INotifyPropertyChanged
,则可以在对象被更改时对其进行排队传输。如果将需要同步的对象保留在
哈希集中
,则可以避免队列中出现双重条目,而以线性排序为代价。如果您仔细地重写
GetHashCode()
,或者更好地创建一个返回更强散列的方法,那么您可以过滤掉两端更改相同的项


编辑:对于初始同步,构建一个包,将所有当前对象生成的哈希作为二进制块列出。这样,交换速度很快。

如果使用可串行化对象的
可观察集合
实现
INotifyPropertyChanged
,则可以在对象被更改时对其进行排队传输。如果将需要同步的对象保留在
哈希集中
,则可以避免队列中出现双重条目,而以线性排序为代价。如果您仔细地重写
GetHashCode()
,或者更好地创建一个返回更强散列的方法,那么您可以过滤掉两端更改相同的项


编辑:对于初始同步,构建一个包,将所有当前对象生成的哈希作为二进制块列出。这样交换很快。

主要问题是,当我连接到另一个对等方时,我是否必须循环检查每个对象,以检查它们是否存在于两个对象上?是的,您必须循环检查较小的集合。如果您可以将正在搜索的集合放入字典中,检查范围可以从O(n)到O(1)。主要问题是,当我连接到另一个对等方时,我是否必须遍历每个对象以检查它们是否存在于两个对象上?是的,您必须遍历较小的集合。如果您可以将正在搜索的集合放入字典,检查范围可以从O(n)到O(1)。初始同步和以后的同步之间有什么区别?这取决于您如何看待它。没有任何特殊的工作,它是相同的,但是生成的哈希集应该有更多的匹配项。:)初始同步和后期同步之间有什么区别?这取决于您如何看待它。没有任何特殊的工作,它是相同的,但是生成的哈希集应该有更多的匹配项。:)