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

时间:2015-12-26 02:04:24

标签: c# object unity3d object-pooling

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

现在,当客户端代码完成对象时,将其传递给要再次缓存的框架。但是要使此模式起作用,需要将对象重置为初始状态。每个字段都必须设置为default(T)。为每个课程手动执行此操作将容易出错并且工作繁琐。

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

当然,性能是主要关注点。我正在寻找最有效的解决方案。

修改

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

2 个答案:

答案 0 :(得分:1)

这个想法是让你的池要求所有池化对象都是IPoolObject。该接口将包含Reset方法。

然后,只要调用弹出项目,就会从池框架中调用此Reset方法。如果没有任何喊叫,该方法仍然是空的。

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

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

答案 1 :(得分:0)

这样的事情怎么样?

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