【发布时间】:2011-05-06 03:37:36
【问题描述】:
我有一个名为“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 对象
【问题讨论】:
-
我猜这与您正在使用的
mode或激活有关。这里有很多信息codeproject.com/KB/WCF/net_remoting.aspx -
感谢您的链接。我没有得到很多关于我的具体情况的信息。本教程中没有返回具有更改值的相同对象的示例。该对象(在第 7 节中)是在调用 .func1() 方法时创建的。顺便说一句,我使用的是单例激活模式,因为我需要不断更新 IPoint 对象的值。
-
一个可能的解决方案是让
IPoint也从MarshalByRefObject继承(并且不可序列化)。单调用/单例设置也可以产生影响。 -
我故意将 DefaultPoint 从 MarshalByRefObject 更改为提高我的应用程序的性能。它确实做得非常好,但代价是下一个问题
标签: c# .net client .net-remoting