行家论点
26
2024
04

内存回收

aardio 会自动回收内存,偶尔看到内存短时间小幅上升是正常的,一段时间后就会自动释放(这样效率更高一些)。有些不是由 aardio 分配的资源,可在析构函数中释放。例如 inet.http 构造函数中调用 table.gc(this,"close") 绑定了 close 函数作为析构函数。aardio 中所有需要析构的对象基本都提供了必须的析构函数。那么有些对象,例如 web.rest 的源码里为什么没有看到析构函数呢?web.rest 调用的是 inet.http ,既然 inet.http 有析构函数,web.rest 当然就不需要了。那么,为什么大量创建 inet.http,web.rest 发现内存在上升呢?1、对象额外分配的资源并不由 aardio 分配或管理。对于某些较重的对象,可以提前释放,例如 inet.http 可以主动调用 close 函数,COM 对象可选调用 com.Release() 释放(非必须,可以不这么做)。aardio 仍然会在一段时间后自动释放这些对象(并不是立即、随时释放,有延迟)。2、在循环内部大量创建 inet.http