济南精品建站外包公司价格,如何建设自己的网站 知乎,简洁企业网站模板,谷歌浏览器手机版下载定义一个名 TablePool class#xff0c;用于管理一个对象池。对象池是一种用于优化内存使用的技术#xff0c;通过重用对象而不是频繁地创建和销毁对象#xff0c;从而减少内存分配和垃圾回收的开销。
设计思路
1. **初始化**#xff1a; - initialize 方法初始化对象…定义一个名 TablePool class用于管理一个对象池。对象池是一种用于优化内存使用的技术通过重用对象而不是频繁地创建和销毁对象从而减少内存分配和垃圾回收的开销。
设计思路
1. **初始化** - initialize 方法初始化对象池接受三个参数capacity池子的容量即最多可以缓存多少个对象、newFunc创建新对象的函数和 rlsFunc释放对象的函数。 - 根据提供的 capacity预先创建一定数量的对象并存储在队列 _ts 中。
2. **获取对象** - getObj 方法从对象池中获取一个对象。如果池子中有对象则从队列的头部取出一个对象如果池子为空且提供了 newFunc则调用 newFunc 创建一个新的对象否则返回一个空表。 3. **释放对象** - releaseObj 方法将一个对象放回池子中。如果提供了 rlsFunc则在放回之前调用 rlsFunc 释放对象。如果对象已经在队列的尾部则记录错误信息因为这意味着对象被重复释放。
4. **销毁对象池** - release 方法用于销毁对象池将所有成员变量置为 nil。
### 用途
对象池通常用于需要频繁创建和销毁对象的场景例如游戏开发中的游戏对象、数据库连接池等。通过使用对象池可以显著减少内存分配和垃圾回收的开销提高程序的性能。
### 注意事项
1. **对象重用**对象池中的对象在被取出后应确保在释放之前不会被修改以避免数据不一致的问题。 2. **错误处理**在 releaseObj 方法中如果尝试释放的对象已经在队列的尾部会记录错误信息。这通常意味着对象被重复释放需要检查代码逻辑。 3. **线程安全**如果对象池在多线程环境中使用需要确保线程安全避免多个线程同时访问和修改对象池。
---class TablePool
local TablePool SimpleClassUtil:class()---param capacity number
---param newFunc fun() : table
---param rlsFunc fun(t : table) void
function TablePool:initialize(capacity, newFunc, rlsFunc)local cap capacity or 4---type Queueself._ts Queue:new()self._newFunc newFunc -- or _defaultNewself._rlsFunc rlsFuncif newFunc thenfor i 1, cap doself._ts:pushBack(newFunc())endelsefor i 1, cap doself._ts:pushBack({})endend
end---return table 从池子里获取的table
function TablePool:getObj()if self._ts thenlocal cnt self._ts:size()if cnt 0 thenif self._newFunc thenreturn self._newFunc()elsereturn {}endelsereturn self._ts:popFront()endend
end---param item table 一定是Get返回的table
function TablePool:releaseObj(item)if self._ts thenif self._rlsFunc thenself._rlsFunc(item)endif self._ts:peekBack() item thenLogger.error(Try Release item to TablePool Failed! You try Release same item twice., item)elseself._ts:pushBack(item)endend
end---overload fun()
function TablePool:release(obsolete)if obsolete thenLogger.error(TablePool:release has Changed Name to TablePool:releaseObj!)self:releaseObj(obsolete)returnendself._newFunc nilself._rlsFunc nilself._ts nil
endreturn TablePool