我正在研究一种池算法,该算法采用分配的对象并将其回收分配以供以后使用。但是,回收对象的问题之一是:
someObject obj = pool.alloc(); //gives me a new object if no previous allocations, If an allocation has been recycled, returns a previous allocation
obj.someVariable = "foo";
pool.recycle(obj);
上面的代码将采用现有的分配并保存它,这样我就不必分配任何额外的内存,以防万一我有另一个 someObject。但是,以下会产生一个问题:
someObject obj = pool.alloc(); //gives me the above allocation
obj.otherVariable = "bar";
obj.dump();
结果,我将得到以下结果:
someVariable = foo
otherVariable = bar
上述方法产生了一个问题。如果我出于某种原因(或其他人)有一个不使用对象内部某些变量的算法,那么旧值可能会导致不必要的行为。我已经戳了一下,看看是否有某种方法可以再次调用默认构造函数(坏主意),而 C#(谢天谢地)似乎不允许你这样做。但是,我想知道是否有某种方法可以使用反射来做到这一点?此外,清除对象中的变量是否会破坏避免 malloc(新)的目的?换句话说,如果我花时间清除变量,性能增益会变得最小吗?我正在尝试自学汇集,因此非常感谢任何批评和建议!