考虑我有一个数据结构:
class Data
{
[Property]
public int i = 3;
[Property]
public UserDefined test = new UserDefined { prop = something; };
}
我正在寻找一种在运行时将其转换为:
class Data : PropertyContainer
{
private int _i = 3;
public int i
{
get
{
return _i;
}
set
{
_i = value;
NotifyChange("i"); // member of PropertyContainer base class
}
}
...
}
有可能吗?我可以这样做Reflection.Emit
吗?如果不是,我可以归档的最接近的东西是什么?我的要求是性能、性能和方便频繁修改此类数据结构,并且不打扰实现细节。我需要定期(15Hz)检查更改并将增量从服务器发送到客户端。
我已经尝试通过反射构建模式并保持上次同步状态。每个滴答我都会通过遍历数据结构、检测变化的部分和构建增量来将最后一个状态与实际数据进行比较。这是一种使用方便的理想方法,但即使优化为缓存除 FieldType.GetValue/SetValue 之外的所有反射调用,性能仍然很差,因为数据结构对于这个频率来说太大了。我有一半时间花在 GetValue 上,其余时间则在遍历层次结构。问题是我受到结构大小的限制,并且每次都需要遍历所有字段,尽管变化并不经常发生。