0

考虑我有一个数据结构:

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 上,其余时间则在遍历层次结构。问题是我受到结构大小的限制,并且每次都需要遍历所有字段,尽管变化并不经常发生。

4

0 回答 0