将类的所有字段设置为默认值的最有效方法
本文关键字:默认值 有效 方法 字段 设置 | 更新日期: 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());
}