将类的所有字段设置为默认值的最有效方法

本文关键字:默认值 有效 方法 字段 设置 | 更新日期: 2023-09-27 18:28:00

我正在尝试创建一个对象池框架。每次客户端请求某种类型的对象时,我都会从缓存(队列)中返回一个对象,或者如果缓存中没有对象,则创建一个新对象。

现在,当客户端代码处理完对象后,将其传递给框架以再次缓存。但要使这种模式发挥作用,需要将对象重置为初始状态。每个字段都必须设置为其CCD_ 1。为每个类手动执行此操作将是一项容易出错且乏味的工作。

public void Reset(){
  x=0;
  y=0;
  ...
}

当然,性能是首要问题。我正在寻找最有效的解决方案。

编辑:

至于动机,这是一个unity3d游戏项目,垃圾收集是unity的一个巨大问题。从垃圾收集中保存的每一个字节都很重要。因此,与创建新对象的最快、最简单、更合理的方式相比,缓存对象是可取的。

将类的所有字段设置为默认值的最有效方法

我们的想法是让您的池要求所有池对象都是IPoolObject。此接口将包含Reset方法。

然后,每当调用弹出项目时,都会从池框架中调用此Reset方法。如果什么都不做,方法仍然是空的。

这样,任何给定的池对象都可以以自己的方式重置,也可以重置附加到该对象的其他组件。

你可以在那里找到我的池对象版本:https://github.com/fafase/unity-utilities/blob/master/Scripts/ObjectPool.cs

这样的东西怎么样?

public void Reset()
{
    foreach(FieldInfo fieldInfo in this.GetType().GetFields())
        fieldInfo.SetValue(default(fieldInfo.GetType());
}