对象池存在的问题
对象池在使用的时候,如果不加以控制,那么会增加内存消耗
比如仅在某个时间段突然需要大量对象,其他时间只用少量对象
此时对象池不够,需要添加更多的对象。而当增加完对象后,大量对象长时间存在内存里没有被使用,就导致了内存消耗。
以下是几种优化方案
1.定期清理掉长时间没使用过的对象。
可以使用1个字典存放每个对象的使用时间,一旦超过了最大使用时间则触发清除
2.设置一个对象池最大数量,每次释放对象时检查对象池数量。
如果对象池内的数量超过了最大值,则触发清除对象,直到数量为最大值。
但是这种方法又会导致新的问题:清理过后,下次再释放1个对象,又会超过最大值,频繁触发清理操作
解决办法:新增1个变量remainCountClear用于确认清理后还剩下多少个对象,当超过最大值maxSize时,list.Count - remainCountClear 为要清除多少个对象