我得到了一个名为“DefaultMeasurement”的MarshalByRefObject,其中包含一个IPoint对象列表。
public class DefaultMeasurement : MarshalByRefObject, IMeasurement
{
private List<IPoint> iPoints;
public this[int aIndex]
{
get { return iPoints[aIndex];}
}
}
[Serializable]
public class DefaultPoint : IPoint, ISerializable
{
public int Value {get;set;}
}
第一次从服务器检索DefaultMeasurement对象时,所有点都将被序列化,并且在随后的所有对DefaultMeasurement.Points的调用期间,我将获得启动客户端后正确的列表。但是与此同时,该列表中至少一个对象的状态可能已更改,尽管在服务器中该状态已更新,但我没有得到该当前状态。
如何强制更新该列表?
进一步澄清:
-一旦我执行
DefaultPoint : MarshalByRefObject
,它将起作用,但这不是一个选择,因为它会对性能产生负面影响-“更新”是指更改服务器上的现有对象,而不在列表本身上添加/删除
-我最多可能有80k
DefaultPoint
对象 最佳答案
由于您不希望Point本身为MarshalByRef(如果您拥有大量Point,这会引入大量流量),因此我建议您使用同步点值的显式方法。在服务器上进行了大量更改后,请调用SynchronizePoints()方法,该方法包括所有点的新值。现在,客户端代理具有更新状态。更好的是,首先从对象中删除状态(因为它实际上并不是服务器状态的直接反射(reflect)),而是使用从服务器收集点时根据需要实例化的客户端对象。
关于c# - .net远程处理: Update already serialized objects,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5906515/